Skip to content

Commit

Permalink
[EIP-3085] handle wallet_addEthereumChain (#131)
Browse files Browse the repository at this point in the history
* handle wallet_addEthereumChain
* update example to handle new methods
  • Loading branch information
hewigovens authored Mar 16, 2021
1 parent dadb69d commit 6acf953
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 10 deletions.
4 changes: 2 additions & 2 deletions dist/trust-min.js
Git LFS file not shown
2 changes: 2 additions & 0 deletions ios/TrustWeb3Provider/DAppMethod.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ enum DAppMethod: String, Decodable, CaseIterable {
case signTypedMessage
case ecRecover
case requestAccounts
case watchAsset
case addEthereumChain
}
39 changes: 34 additions & 5 deletions ios/TrustWeb3Provider/DAppWebViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class DAppWebViewController: UIViewController {
@IBOutlet weak var urlField: UITextField!

var homepage: String {
return "https://js-eth-sign.surge.sh"
return "https://chainlist.org"
}

let privateKey = PrivateKey(data: Data(hexString: "0x4646464646464646464646464646464646464646464646464646464646464646")!)!
Expand Down Expand Up @@ -123,6 +123,9 @@ extension DAppWebViewController: WKScriptMessageHandler {
self.webview.sendResult(recovered, to: id)
}
break
case .addEthereumChain:
guard let (chainId, name, rpcUrls) = extractChainInfo(json: json) else { return }
alert(title: name, message: "chainId: \(chainId)\n \(rpcUrls.joined(separator: "\n")))")
default:
break
}
Expand Down Expand Up @@ -161,24 +164,50 @@ extension DAppWebViewController: WKScriptMessageHandler {
present(alert, animated: true, completion: nil)
}

func alert(title: String, message: String) {
let alert = UIAlertController(
title: title,
message: message,
preferredStyle: .alert
)
alert.addAction(.init(title: "OK", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
}

private func extractMessage(json: [String: Any]) -> Data? {
guard let params = json["object"] as? [String: Any],
guard
let params = json["object"] as? [String: Any],
let string = params["data"] as? String,
let data = Data(hexString: string) else {
let data = Data(hexString: string)
else {
return nil
}
return data
}

private func extractSignature(json: [String: Any]) -> (signature: Data, message: Data)? {
guard let params = json["object"] as? [String: Any],
guard
let params = json["object"] as? [String: Any],
let signature = params["signature"] as? String,
let message = params["message"] as? String else {
let message = params["message"] as? String
else {
return nil
}
return (Data(hexString: signature)!, Data(hexString: message)!)
}

private func extractChainInfo(json: [String: Any]) ->(chainId: String, name: String, rpcUrls: [String])? {
guard
let params = json["object"] as? [String: Any],
let string = params["chainId"] as? String,
let name = params["chainName"] as? String,
let urls = params["rpcUrls"] as? [String]
else {
return nil
}
return (chainId: string, name: name, rpcUrls: urls)
}

private func signMessage(data: Data, addPrefix: Bool = true) -> Data {
let message = addPrefix ? Hash.keccak256(data: ethereumMessage(for: data)) : data
var signed = privateKey.sign(digest: message, curve: .secp256k1)!
Expand Down
13 changes: 10 additions & 3 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ class TrustWeb3Provider extends EventEmitter {
return this.eth_requestAccounts(payload);
case "wallet_watchAsset":
return this.wallet_watchAsset(payload);
case "wallet_addEthereumChain":
return this.wallet_addEthereumChain(payload);
case "eth_newFilter":
case "eth_newBlockFilter":
case "eth_newPendingTransactionFilter":
Expand Down Expand Up @@ -252,14 +254,19 @@ class TrustWeb3Provider extends EventEmitter {
}

wallet_watchAsset(payload) {
let options = payload.params.options;
this.postMessage("watchAsset", payload.id, {
type: payload.type,
contract: payload.options.address,
symbol: payload.options.symbol,
decimals: payload.options.decimals || 0,
contract: options.address,
symbol: options.symbol,
decimals: options.decimals || 0,
});
}

wallet_addEthereumChain(payload) {
this.postMessage("addEthereumChain", payload.id, payload.params[0]);
}

/**
* @private Internal js -> native message handler
*/
Expand Down

0 comments on commit 6acf953

Please sign in to comment.