Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. public enum NodeFinding {
  2. case anySuitableNode(discovery: NodesDiscovery)
  3. case connectToSpecific(urlToNodes: [URL], ifAllSpecifiedNodesAreUnsuitable: StrategyWhenSpecifiedNodesAreUnsuitable)
  4. }
  5.  
  6. public extension NodeFinding {
  7.  
  8. struct StrategyWhenSpecifiedNodesAreUnsuitable {
  9. let strategyWhenSpecifiedNodesAreOffline: StrategyWhenSpecifiedNodesAreOffline
  10. let strategyWhenSpecifiedNodesDontServeShard: StrategyWhenSpecifiedNodesDontServeShard
  11.  
  12. public init(
  13. ifOffline strategyWhenSpecifiedNodesAreOffline: StrategyWhenSpecifiedNodesAreOffline = .default,
  14. ifShardMismatch strategyWhenSpecifiedNodesDontServeShard: StrategyWhenSpecifiedNodesDontServeShard = .default
  15. ) {
  16. self.strategyWhenSpecifiedNodesAreOffline = strategyWhenSpecifiedNodesAreOffline
  17. self.strategyWhenSpecifiedNodesDontServeShard = strategyWhenSpecifiedNodesDontServeShard
  18. }
  19. }
  20.  
  21. enum StrategyWhenSpecifiedNodesAreOffline {
  22. case throwError
  23. case fallbackToAnySuitableNode
  24. case pollAndReconnectWhenOnline
  25.  
  26. public static var `default`: StrategyWhenSpecifiedNodesAreOffline {
  27. return .fallbackToAnySuitableNode
  28. }
  29. }
  30.  
  31. enum StrategyWhenSpecifiedNodesDontServeShard {
  32. case throwError
  33. case fallbackToAnySuitableNode
  34.  
  35. public static var `default`: StrategyWhenSpecifiedNodesDontServeShard {
  36. return .fallbackToAnySuitableNode
  37. }
  38. }
  39. }
  40.  
  41.  
  42. // USAGE
  43.  
  44. let hdRootPrivateKey = PrivateKey() // user backs up mnemonic
  45. let hdRootKey = HierarchicalDeterministicRoot(private: hdRootPrivateKey)
  46. let identity = AbstractIdentity(hdRootKey: hdRootKey, alias: "Alice", create: 1.account)
  47. identity.newAccountFromHDRootKeyIfPresent(at: 0)
  48. let ledger = DefaultLedger(universeConfig: .betanet)
  49. let applicationClient = DefaultRadixApplicationClient(ledger: ledger, identity: identity)
  50.  
  51.  
  52. applicationClient.changeUniverse(
  53. config: .mainnet,
  54. nodeFinding: .connectToSpecific(
  55. urlToNodes: ["123.1.2.3", "222.111.0.1"],
  56. ifAllSpecifiedNodesAreUnsuitable: .init(ifOffline: .fallbackToAnySuitableNode, ifShardMismatch: .fallbackToAnySuitableNode)
  57. )
  58. )
  59.  
  60.  
  61. applicationClient.changeUniverse(
  62. config: .betanet,
  63. nodeFinding: .anySuitableNode(discovery: NodesFinder(originNodeFinder: .betanet))
  64. )
  65.  
  66.  
  67. applicationClient.changeUniverse(
  68. config: .betanet,
  69. nodeFinding: .anySuitableNode(discovery: NodesFinder(urlToSomeOriginNode: "33.22.11.0"))
  70. )
  71.  
  72. // Adding a new account from HD root key
  73. applicationClient.identity.newAccountFromHDRootKeyIfPresent(at: 1)
  74. applicationClient.changeAccount { $0.last }
  75.  
  76. // Adding a new account using a hardware key (private key stored in the hardware key)
  77. // Thus this library will trigger any client (wallet) to present user
  78. // with "sign using hardware key" flow
  79. let radixPlasticKey = HardwareKey.fromNFCScanner()
  80. applicationClient.identity.addAccountForHardwardKey(radixPlasticKey)
  81. applicationClient.changeAccount { $0.last }
  82.  
  83. // Hardware key is active account, thus a "sign on device" flow is presented to the user
  84. let createTokenAction = CreateToken(name: "SuperCoin", symbol: "SC", granularity: 1234, etc: ())
  85.  
  86. class ScreenInWallet {}
  87.  
  88. class SignTransacionScreen: ScreenInWallet {
  89.  
  90. func createToken() {
  91. let callback = PromptUserToProvideSigningKey(timeout: nil)
  92. applicationClient.createToken(
  93. createTokenAction,
  94. ifNoSigningKeyPresent: .promptUserToProvideKey(callback)
  95. )
  96. promptUserToSignAction(callback: callback)
  97. }
  98.  
  99. func promptUserToSignAction(callback: PromptUserToProvideSigningKey) {
  100. // when user flow is done, call onResult
  101. callback.onResult(.cancelled)
  102. }
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement