From fcb159f7bb6196dfe468d6bbccc1bb68fc1d5cec Mon Sep 17 00:00:00 2001 From: shuoshubao Date: Mon, 25 Sep 2023 17:41:49 +0800 Subject: [PATCH] style(auth-core): [evm - api] personalSign personalSignUnique signTypedData signTypedDataUnique sendTransaction --- .editorconfig | 9 ++ .../example/lib/auth_core_demo.dart | 10 ++ particle-auth-core/example/lib/main.dart | 22 +++++ .../ios/Classes/ParticleAuthCorePlugin.swift | 91 ++++++++++++++++++- .../lib/particle_auth_core.dart | 30 ++++++ 5 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..ba7443bc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/particle-auth-core/example/lib/auth_core_demo.dart b/particle-auth-core/example/lib/auth_core_demo.dart index 0fcdebad..d80e27c8 100644 --- a/particle-auth-core/example/lib/auth_core_demo.dart +++ b/particle-auth-core/example/lib/auth_core_demo.dart @@ -57,4 +57,14 @@ class AuthCoreDemo { print("solanaGetAddress: $result"); showToast("solana: $result"); } + + static void personalSign(messageHex) async { + final result = await ParticleAuthCore.personalSign(messageHex); + print("personalSign: $result"); + } + + static void personalSignUnique(messageHex) async { + final result = await ParticleAuthCore.personalSignUnique(messageHex); + print("personalSign: $result"); + } } diff --git a/particle-auth-core/example/lib/main.dart b/particle-auth-core/example/lib/main.dart index 56047998..47f6f368 100644 --- a/particle-auth-core/example/lib/main.dart +++ b/particle-auth-core/example/lib/main.dart @@ -132,6 +132,28 @@ class _MyHomePageState extends State { style: TextStyle(fontSize: 20), ), ), + ElevatedButton( + onPressed: () { + print('personalSign'); + const message = 'Hello world!'; + AuthCoreDemo.personalSign(message); + }, + child: const Text( + 'personalSign evm', + style: TextStyle(fontSize: 20), + ), + ), + ElevatedButton( + onPressed: () { + print('personalSignUnique'); + const message = 'Hello world!'; + AuthCoreDemo.personalSignUnique(message); + }, + child: const Text( + 'personalSignUnique evm', + style: TextStyle(fontSize: 20), + ), + ), ], ), ), diff --git a/particle-auth-core/ios/Classes/ParticleAuthCorePlugin.swift b/particle-auth-core/ios/Classes/ParticleAuthCorePlugin.swift index f56c47c2..50bc0fc8 100644 --- a/particle-auth-core/ios/Classes/ParticleAuthCorePlugin.swift +++ b/particle-auth-core/ios/Classes/ParticleAuthCorePlugin.swift @@ -25,6 +25,11 @@ public class ParticleAuthCorePlugin: NSObject, FlutterPlugin { case evmGetAddress case solanaGetAddress case switchChain + case personalSign + case personalSignUnique + case signTypedData + case signTypedDataUnique + case sendTransaction } public static func register(with registrar: FlutterPluginRegistrar) { @@ -40,7 +45,7 @@ public class ParticleAuthCorePlugin: NSObject, FlutterPlugin { result(FlutterMethodNotImplemented) return } - + let json = call.arguments switch method { @@ -60,6 +65,16 @@ public class ParticleAuthCorePlugin: NSObject, FlutterPlugin { self.evmGetAddress(flutterResult: result) case .solanaGetAddress: self.solanaGetAddress(flutterResult: result) + case .personalSign: + self.personalSign(json as? String, flutterResult: result) + case .personalSignUnique: + self.personalSignUnique(json as? String, flutterResult: result) + case .signTypedData: + self.signTypedData(json as? String, flutterResult: result) + case .signTypedDataUnique: + self.signTypedDataUnique(json as? String, flutterResult: result) + case .sendTransaction: + self.sendTransaction(json as? String, flutterResult: result) } } } @@ -92,7 +107,7 @@ public extension ParticleAuthCorePlugin { let config = ParticleNetworkConfiguration(chainInfo: chainInfo, devEnv: devEnv) ParticleNetwork.initialize(config: config) } - + func connect(_ json: String?, flutterResult: @escaping FlutterResult) { let jwt = json ?? "" Task { @@ -127,7 +142,7 @@ public extension ParticleAuthCorePlugin { let json = String(data: data, encoding: .utf8) flutterResult(json ?? "") } - + func disconnect(flutterResult: @escaping FlutterResult) { Task { do { @@ -179,6 +194,76 @@ public extension ParticleAuthCorePlugin { flutterResult(result ?? "") } + + func personalSign(_ json: String?, flutterResult: @escaping FlutterResult) { + let messageHex = json ?? "" + + Task { + do { + let signature = try await auth.evm.personalSign(messageHex) + flutterResult(signature) + } catch { + print(error) + flutterResult("") + } + } + } + + func personalSignUnique(_ json: String?, flutterResult: @escaping FlutterResult) { + let messageHex = json ?? "" + + Task { + do { + let signature = try await auth.evm.personalSignUnique(messageHex) + flutterResult(signature) + } catch { + print(error) + flutterResult("") + } + } + } + + func signTypedData(_ json: String?, flutterResult: @escaping FlutterResult) { + let typedDataV4 = json ?? "" + + Task { + do { + let signature = try await auth.evm.signTypedData(typedDataV4) + flutterResult(signature) + } catch { + print(error) + flutterResult("") + } + } + } + + func signTypedDataUnique(_ json: String?, flutterResult: @escaping FlutterResult) { + let typedDataV4 = json ?? "" + + Task { + do { + let signature = try await auth.evm.signTypedDataUnique(typedDataV4) + flutterResult(signature) + } catch { + print(error) + flutterResult("") + } + } + } + + func sendTransaction(_ json: String?, flutterResult: @escaping FlutterResult) { + let transaction = json ?? "" + + Task { + do { + let signature = try await auth.evm.sendTransaction(transaction) + flutterResult(signature) + } catch { + print(error) + flutterResult("") + } + } + } } extension ParticleAuthCorePlugin { diff --git a/particle-auth-core/lib/particle_auth_core.dart b/particle-auth-core/lib/particle_auth_core.dart index 6fb19900..934b46dc 100644 --- a/particle-auth-core/lib/particle_auth_core.dart +++ b/particle-auth-core/lib/particle_auth_core.dart @@ -52,4 +52,34 @@ class ParticleAuthCore { static Future switchChain(int chainId) async { return await _channel.invokeMethod('switchChain', chainId); } + + // evm + // personal sign + static Future personalSign(String messageHex) async { + return await _channel.invokeMethod('personalSign', messageHex); + } + + // evm + // personal sign unique + static Future personalSignUnique(String messageHex) async { + return await _channel.invokeMethod('personalSignUnique', messageHex); + } + + // evm + // sign typed data + static Future signTypedData(String typedDataV4) async { + return await _channel.invokeMethod('signTypedData', typedDataV4); + } + + // evm + // sign typed data unique + static Future signTypedDataUnique(String typedDataV4) async { + return await _channel.invokeMethod('signTypedDataUnique', typedDataV4); + } + + // evm + // send transaction + static Future sendTransaction(String transaction) async { + return await _channel.invokeMethod('sendTransaction', transaction); + } }