@aeternity/aepp-sdk 11.0.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -0,0 +1,118 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+ /**
19
+ * Contract module - routines to interact with the æternity contract
20
+ *
21
+ * High level documentation of the contracts are available at
22
+ * https://github.com/aeternity/protocol/tree/master/contracts and
23
+ */
24
+
25
+ import { AensName } from '../tx/builder/schema'
26
+ import { decode, produceNameId } from '../tx/builder/helpers'
27
+ import { concatBuffers } from '../utils/other'
28
+ import { EncodedData, EncodingType } from '../utils/encoder'
29
+ import AccountBase from '../account/Base'
30
+ import Node from '../Node'
31
+ export { default as getContractInstance } from './aci'
32
+
33
+ /**
34
+ * Utility method to create a delegate signature for a contract
35
+ * @param ids - The list of id's to prepend
36
+ * @param opt - Options
37
+ * @param opt.onNode - Node to use
38
+ * @param opt.onAccount - Account to use
39
+ * @returns Signature in hex representation
40
+ */
41
+ async function delegateSignatureCommon (
42
+ ids: Array<EncodedData<EncodingType>> = [],
43
+ { onAccount, onNode, ...opt }:
44
+ { onAccount: AccountBase, onNode: Node } & Parameters<AccountBase['sign']>[1]
45
+ ): Promise<string> {
46
+ const signature = await onAccount.sign(
47
+ concatBuffers([
48
+ Buffer.from((await onNode.getStatus()).networkId),
49
+ ...ids.map(e => decode(e))
50
+ ]),
51
+ opt
52
+ )
53
+ return Buffer.from(signature).toString('hex')
54
+ }
55
+
56
+ /**
57
+ * Helper to generate a signature to delegate pre-claim/claim/transfer/revoke of a name to
58
+ * a contract.
59
+ * @param contractId - Contract Id
60
+ * @param opt - Options
61
+ * @param opt.name - The name
62
+ * @returns Signature for delegation
63
+ * @example
64
+ * ```js
65
+ * const aeSdk = new AeSdk({ ... })
66
+ * const contractId = 'ct_asd2ks...' // contract address
67
+ * const name = 'example.chain' // AENS name
68
+ * const onAccount = await aeSdk.address() // Sign with a specific account
69
+ * // Preclaim signature
70
+ * const preclaimSig = await aeSdk.createAensDelegationSignature(contractId, { onAccount: current })
71
+ * // Claim, transfer and revoke signature
72
+ * const aensDelegationSig = await contract.createAensDelegationSignature(
73
+ * contractId, { name, onAccount: current }
74
+ * )
75
+ * ```
76
+ */
77
+ export async function createAensDelegationSignature (
78
+ contractId: EncodedData<'ct'>,
79
+ opt: Parameters<AccountBase['address']>[0] & Parameters<typeof delegateSignatureCommon>[1] &
80
+ { name?: AensName }
81
+ ): Promise<string> {
82
+ return await delegateSignatureCommon(
83
+ [
84
+ await opt.onAccount.address(opt),
85
+ ...opt.name != null ? [produceNameId(opt.name)] : [],
86
+ contractId
87
+ ],
88
+ opt
89
+ )
90
+ }
91
+
92
+ /**
93
+ * Helper to generate a signature to delegate register/extend/respond of a Oracle to a contract.
94
+ * @param contractId - Contract Id
95
+ * @param opt - Options
96
+ * @param opt.queryId - Oracle Query Id
97
+ * @returns Signature for delegation
98
+ * @example
99
+ * ```js
100
+ * const aeSdk = new AeSdk({ ... })
101
+ * const contractId = 'ct_asd2ks...' // contract address
102
+ * const queryId = 'oq_...' // Oracle Query Id
103
+ * const onAccount = await aeSdk.address() // Sign with a specific account
104
+ * // Oracle register and extend signature
105
+ * const oracleDelegationSig = await aeSdk.createOracleDelegationSignature(contractId)
106
+ * // Oracle respond signature
107
+ * const respondSig = await aeSdk.createOracleDelegationSignature(contractId, { queryId })
108
+ * ```
109
+ */
110
+ export async function createOracleDelegationSignature (
111
+ contractId: EncodedData<'ct'>,
112
+ opt: Parameters<AccountBase['address']>[0] & Parameters<typeof delegateSignatureCommon>[1] &
113
+ { queryId?: EncodedData<'oq'> }
114
+ ): Promise<string> {
115
+ return await delegateSignatureCommon(
116
+ [opt.queryId ?? await opt.onAccount.address(opt), contractId], opt
117
+ )
118
+ }
package/src/index.ts ADDED
@@ -0,0 +1,51 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+ export * from './chain'
19
+ export * from './utils/crypto'
20
+ export * from './utils/keystore'
21
+ export * from './utils/bytes'
22
+ export * from './tx'
23
+ export * from './tx/builder'
24
+ export * from './tx/builder/helpers'
25
+ export * from './tx/builder/schema'
26
+ export * from './utils/amount-formatter'
27
+ export * from './utils/hd-wallet'
28
+ export * from './aens'
29
+ export * from './contract/methods'
30
+ export * from './oracle'
31
+ export * from './spend'
32
+ export * from './contract/ga'
33
+
34
+ export { default as AeSdkBase } from './AeSdkBase'
35
+ export { default as AeSdk } from './AeSdk'
36
+ export { default as AeSdkAepp } from './AeSdkAepp'
37
+ export { default as AeSdkWallet } from './AeSdkWallet'
38
+ export { default as Node } from './Node'
39
+ export { default as verifyTransaction } from './tx/validator'
40
+ export { default as calculateMinFee } from './tx/min-fee'
41
+ export { default as AccountBase } from './account/Base'
42
+ export { default as MemoryAccount } from './account/Memory'
43
+ export { default as Compiler } from './contract/Compiler'
44
+ export { default as Channel } from './channel'
45
+
46
+ export { default as connectionProxy } from './aepp-wallet-communication/connection-proxy'
47
+ export * from './aepp-wallet-communication/schema'
48
+ export { default as walletDetector } from './aepp-wallet-communication/wallet-detector'
49
+ export { default as BrowserRuntimeConnection } from './aepp-wallet-communication/connection/BrowserRuntime'
50
+ export { default as BrowserWindowMessageConnection } from './aepp-wallet-communication/connection/BrowserWindowMessage'
51
+ export * from './utils/errors'
package/src/oracle.ts ADDED
@@ -0,0 +1,342 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+ /**
19
+ * Oracle methods - routines to interact with the æternity oracle system
20
+ *
21
+ * The high-level description of the oracle system is
22
+ * https://github.com/aeternity/protocol/blob/master/ORACLE.md in the protocol
23
+ * repository.
24
+ */
25
+
26
+ import { send, SendOptions } from './spend'
27
+ import { mapObject, pause } from './utils/other'
28
+ import { oracleQueryId, decode, encode } from './tx/builder/helpers'
29
+ import { unpackTx } from './tx/builder'
30
+ import {
31
+ ORACLE_TTL,
32
+ ORACLE_TTL_TYPES,
33
+ QUERY_FEE,
34
+ QUERY_TTL,
35
+ RESPONSE_TTL,
36
+ TX_TYPE
37
+ } from './tx/builder/schema'
38
+ import { RequestTimedOutError } from './utils/errors'
39
+ import { EncodedData } from './utils/encoder'
40
+ import { _getPollInterval } from './chain'
41
+ import { _buildTx, BuildTxOptions } from './tx'
42
+ import Node from './Node'
43
+ import BigNumber from 'bignumber.js'
44
+ import AccountBase from './account/Base'
45
+
46
+ type OracleQueries = Awaited<ReturnType<Node['getOracleQueriesByPubkey']>>['oracleQueries']
47
+
48
+ /**
49
+ * Constructor for Oracle Object (helper object for using Oracle)
50
+ * @param oracleId - Oracle public key
51
+ * @param options - Options
52
+ * @returns Oracle object
53
+ */
54
+ export async function getOracleObject (
55
+ oracleId: EncodedData<'ok'>, options: { onNode: Node, onAccount: AccountBase }
56
+ ): Promise<GetOracleObjectReturnType> {
57
+ return {
58
+ ...await options.onNode.getOracleByPubkey(oracleId),
59
+ queries: (await options.onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries,
60
+ ...mapObject<Function, Function>(
61
+ {
62
+ pollQueries: pollForQueries,
63
+ postQuery: postQueryToOracle,
64
+ respondToQuery,
65
+ extendOracle: extendOracleTtl,
66
+ getQuery: getQueryObject
67
+ },
68
+ ([name, handler]) => [
69
+ name,
70
+ function (...args: any) {
71
+ const lastArg = args[args.length - 1]
72
+ if (lastArg != null && typeof lastArg === 'object' && lastArg.constructor === Object) {
73
+ Object.assign(lastArg, { ...options, ...lastArg })
74
+ } else args.push(options)
75
+ return handler(oracleId, ...args)
76
+ }
77
+ ])
78
+ } as any
79
+ }
80
+
81
+ interface GetOracleObjectReturnType extends Awaited<ReturnType<Node['getOracleByPubkey']>> {
82
+ id: EncodedData<'ok'>
83
+ queries: OracleQueries
84
+ // TODO: replace getOracleObject with a class
85
+ pollQueries: (cb: Parameters<typeof pollForQueries>[1]) => ReturnType<typeof pollForQueries>
86
+ postQuery: Function
87
+ respondToQuery: Function
88
+ extendOracle: Function
89
+ getQuery: Function
90
+ }
91
+
92
+ /**
93
+ * Poll for oracle queries
94
+ * @param oracleId - Oracle public key
95
+ * @param onQuery - OnQuery callback
96
+ * @param options - Options object
97
+ * @param options.interval - Poll interval(default: 5000)
98
+ * @param options.onNode - Node to use
99
+ * @returns Callback to stop polling function
100
+ */
101
+ export function pollForQueries (
102
+ oracleId: EncodedData<'ok'>,
103
+ onQuery: (queries: OracleQueries) => void,
104
+ { interval, onNode, ...options }: { interval?: number, onNode: Node }
105
+ & Parameters<typeof _getPollInterval>[1]
106
+ ): () => void {
107
+ interval ??= _getPollInterval('microblock', options)
108
+ const knownQueryIds = new Set()
109
+ const checkNewQueries = async (): Promise<void> => {
110
+ const queries = ((await onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries ?? [])
111
+ .filter(({ id }) => !knownQueryIds.has(id))
112
+ queries.forEach(({ id }) => knownQueryIds.add(id))
113
+ if (queries.length > 0) onQuery(queries)
114
+ }
115
+
116
+ let stopped = false;
117
+
118
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
119
+ (async () => {
120
+ while (!stopped) { // eslint-disable-line no-unmodified-loop-condition
121
+ // TODO: allow to handle this error somehow
122
+ await checkNewQueries().catch(console.error)
123
+ await pause(interval)
124
+ }
125
+ })()
126
+ return () => { stopped = true }
127
+ }
128
+
129
+ /**
130
+ * Constructor for OracleQuery Object (helper object for using OracleQuery)
131
+ * @param oracleId - Oracle public key
132
+ * @param queryId - Oracle Query id
133
+ * @param options - Options
134
+ * @returns OracleQuery object
135
+ */
136
+ export async function getQueryObject (
137
+ oracleId: EncodedData<'ok'>,
138
+ queryId: EncodedData<'oq'>,
139
+ options: RespondToQueryOptions & Parameters<typeof pollForQueryResponse>[2]
140
+ ): Promise<GetQueryObjectReturnType> {
141
+ const record = await options.onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId)
142
+ return {
143
+ ...record,
144
+ decodedQuery: decode(record.query as EncodedData<'oq'>).toString(),
145
+ decodedResponse: decode(record.response as EncodedData<'or'>).toString(),
146
+ respond: async (response, opt) =>
147
+ await respondToQuery(oracleId, queryId, response, { ...options, ...opt }),
148
+ pollForResponse: async (opt) =>
149
+ await pollForQueryResponse(oracleId, queryId, { ...options, ...opt })
150
+ }
151
+ }
152
+
153
+ interface GetQueryObjectReturnType extends Awaited<ReturnType<Node['getOracleQueryByPubkeyAndQueryId']>> {
154
+ decodedQuery: string
155
+ decodedResponse: string
156
+ respond: (response: string, options?: Parameters<typeof respondToQuery>[3]) =>
157
+ ReturnType<typeof respondToQuery>
158
+ pollForResponse: (options?: Parameters<typeof pollForQueryResponse>[2]) =>
159
+ ReturnType<typeof pollForQueryResponse>
160
+ }
161
+
162
+ /**
163
+ * Poll for oracle query response
164
+ * @param oracleId - Oracle public key
165
+ * @param queryId - Oracle Query id
166
+ * @param options - Options object
167
+ * @param options.attempts - Poll attempts
168
+ * @param options.interval - Poll interval
169
+ * @param options.onNode - Node to use
170
+ * @returns OracleQuery object
171
+ */
172
+ export async function pollForQueryResponse (
173
+ oracleId: EncodedData<'ok'>,
174
+ queryId: EncodedData<'oq'>,
175
+ { attempts = 20, interval, onNode, ...options }:
176
+ { attempts?: number, interval?: number, onNode: Node } & Parameters<typeof _getPollInterval>[1]
177
+ ): Promise<string> {
178
+ interval ??= _getPollInterval('microblock', options)
179
+ for (let i = 0; i < attempts; i++) {
180
+ if (i > 0) await pause(interval)
181
+ const { response } = await onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId)
182
+ const responseBuffer = decode(response as EncodedData<'or'>)
183
+ if (responseBuffer.length > 0) return responseBuffer.toString()
184
+ }
185
+ throw new RequestTimedOutError((attempts - 1) * interval)
186
+ }
187
+
188
+ /**
189
+ * Register oracle
190
+ * @param queryFormat - Format of query
191
+ * @param responseFormat - Format of query response
192
+ * @param options - Options
193
+ * @param options.queryFee - Oracle query Fee
194
+ * @param options - Options object
195
+ * @param options.abiVersion - Always 0 (do not use virtual machine)
196
+ * @param options.fee - Transaction fee
197
+ * @param options.ttl - Transaction time to leave
198
+ * @returns Oracle object
199
+ */
200
+ export async function registerOracle (
201
+ queryFormat: string, responseFormat: string, options: RegisterOracleOptions
202
+ ): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {
203
+ const accountId = await options.onAccount.address(options)
204
+ const oracleRegisterTx = await _buildTx(TX_TYPE.oracleRegister, {
205
+ queryFee: QUERY_FEE,
206
+ oracleTtlValue: ORACLE_TTL.value,
207
+ oracleTtlType: ORACLE_TTL.type,
208
+ ...options,
209
+ accountId,
210
+ queryFormat,
211
+ responseFormat
212
+ })
213
+ return {
214
+ ...await send(oracleRegisterTx, options),
215
+ ...await getOracleObject(encode(decode(accountId), 'ok'), options)
216
+ }
217
+ }
218
+
219
+ type RegisterOracleOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]
220
+ & BuildTxOptions<TX_TYPE.oracleRegister, 'accountId' | 'queryFormat' | 'responseFormat' | 'queryFee' | 'oracleTtlType' | 'oracleTtlValue'>
221
+ & {
222
+ queryFee?: number | string | BigNumber
223
+ oracleTtlType?: ORACLE_TTL_TYPES
224
+ oracleTtlValue?: number
225
+ }
226
+ interface RegisterOracleOptions extends RegisterOracleOptionsType {}
227
+
228
+ /**
229
+ * Post query to oracle
230
+ * @param oracleId - Oracle public key
231
+ * @param query - Oracle query object
232
+ * @param options - Options object
233
+ * @param options.queryTtl - queryTtl Oracle query time to leave
234
+ * @param options.responseTtl - queryFee Oracle query response time to leave
235
+ * @param options.queryFee - queryFee Oracle query fee
236
+ * @param options.fee - fee Transaction fee
237
+ * @param options.ttl - Transaction time to leave
238
+ * @returns Query object
239
+ */
240
+ export async function postQueryToOracle (oracleId: EncodedData<'ok'>,
241
+ query: string, options: PostQueryToOracleOptions
242
+ ): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getQueryObject>>> {
243
+ options.queryFee ??= (await options.onNode.getOracleByPubkey(oracleId)).queryFee.toString()
244
+ const senderId = await options.onAccount.address(options)
245
+
246
+ const oracleQueryTx = await _buildTx(TX_TYPE.oracleQuery, {
247
+ queryTtlType: QUERY_TTL.type,
248
+ queryTtlValue: QUERY_TTL.value,
249
+ responseTtlType: RESPONSE_TTL.type,
250
+ responseTtlValue: RESPONSE_TTL.value,
251
+ ...options,
252
+ oracleId,
253
+ senderId,
254
+ query
255
+ })
256
+ const nonce = unpackTx(oracleQueryTx, TX_TYPE.oracleQuery).tx.nonce
257
+ const queryId = oracleQueryId(senderId, nonce, oracleId)
258
+ return {
259
+ ...await send(oracleQueryTx, options),
260
+ ...await getQueryObject(oracleId, queryId, options)
261
+ }
262
+ }
263
+
264
+ type PostQueryToOracleOptionsType = Parameters<typeof send>[1]
265
+ & Parameters<typeof getQueryObject>[2]
266
+ & BuildTxOptions<TX_TYPE.oracleQuery, 'oracleId' | 'senderId' | 'query' | 'queryTtlType' | 'queryTtlValue' | 'responseTtlType' | 'responseTtlValue'>
267
+ & {
268
+ queryTtlType?: ORACLE_TTL_TYPES
269
+ queryTtlValue?: number
270
+ responseTtlType?: ORACLE_TTL_TYPES
271
+ responseTtlValue?: number
272
+ }
273
+ interface PostQueryToOracleOptions extends PostQueryToOracleOptionsType {}
274
+
275
+ /**
276
+ * Extend oracle ttl
277
+ * @param oracleId - Oracle public key
278
+ * @param options - Options object
279
+ * @param options.fee - fee Transaction fee
280
+ * @param options.ttl - Transaction time to leave
281
+ * @param options.oracleTtlType - Oracle time to leave for extend
282
+ * @param options.oracleTtlValue - Oracle time to leave for extend
283
+ * @returns Oracle object
284
+ */
285
+ export async function extendOracleTtl (
286
+ oracleId: EncodedData<'ok'>,
287
+ options: ExtendOracleTtlOptions
288
+ ): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {
289
+ const oracleExtendTx = await _buildTx(TX_TYPE.oracleExtend, {
290
+ oracleTtlType: ORACLE_TTL.type,
291
+ oracleTtlValue: ORACLE_TTL.value,
292
+ ...options,
293
+ callerId: await options.onAccount.address(options),
294
+ oracleId
295
+ })
296
+ return {
297
+ ...await send(oracleExtendTx, options),
298
+ ...await getOracleObject(oracleId, options)
299
+ }
300
+ }
301
+
302
+ type ExtendOracleTtlOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]
303
+ & BuildTxOptions<TX_TYPE.oracleExtend, 'oracleTtlType' | 'oracleTtlValue' | 'callerId' | 'oracleId'>
304
+ & { oracleTtlType?: ORACLE_TTL_TYPES, oracleTtlValue?: number }
305
+ interface ExtendOracleTtlOptions extends ExtendOracleTtlOptionsType {}
306
+
307
+ /**
308
+ * Extend oracle ttl
309
+ * @param oracleId - Oracle public key
310
+ * @param queryId - Oracle query id
311
+ * @param response - Oracle query response
312
+ * @param options - Options object
313
+ * @param options.responseTtl - responseTtl Query response time to leave
314
+ * @param options.fee - Transaction fee
315
+ * @param options.ttl - Transaction time to leave
316
+ * @returns Oracle object
317
+ */
318
+ export async function respondToQuery (
319
+ oracleId: EncodedData<'ok'>,
320
+ queryId: EncodedData<'oq'>,
321
+ response: string,
322
+ options: RespondToQueryOptions
323
+ ): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {
324
+ const oracleRespondTx = await _buildTx(TX_TYPE.oracleResponse, {
325
+ responseTtlType: RESPONSE_TTL.type,
326
+ responseTtlValue: RESPONSE_TTL.value,
327
+ ...options,
328
+ callerId: await options.onAccount.address(options),
329
+ oracleId,
330
+ queryId,
331
+ response
332
+ })
333
+ return {
334
+ ...await send(oracleRespondTx, options),
335
+ ...await getOracleObject(oracleId, options)
336
+ }
337
+ }
338
+
339
+ type RespondToQueryOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]
340
+ & BuildTxOptions<TX_TYPE.oracleResponse, 'callerId' | 'oracleId' | 'queryId' | 'response' | 'responseTtlType' | 'responseTtlValue'>
341
+ & { responseTtlType?: ORACLE_TTL_TYPES, responseTtlValue?: number }
342
+ interface RespondToQueryOptions extends RespondToQueryOptionsType {}
package/src/spend.ts ADDED
@@ -0,0 +1,152 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+ import { sendTransaction, getAccount, getBalance, resolveName } from './chain'
18
+ import { _buildTx, BuildTxOptions } from './tx'
19
+ import { buildTxHash, unpackTx } from './tx/builder'
20
+ import BigNumber from 'bignumber.js'
21
+ import { ArgumentError } from './utils/errors'
22
+ import { EncodedData } from './utils/encoder'
23
+ import { createMetaTx } from './contract/ga'
24
+ import { TX_TYPE, AensName } from './tx/builder/schema'
25
+ import AccountBase from './account/Base'
26
+
27
+ /**
28
+ * Sign and post a transaction to the chain
29
+ * @param tx - Transaction
30
+ * @param options - Options
31
+ * @param options.verify - Verify transaction before broadcast, throw error if not
32
+ * valid
33
+ * @returns Transaction
34
+ */
35
+ export async function send (tx: EncodedData<'tx'>, options: SendOptions): Promise<SendReturnType> {
36
+ const { contractId, authFun = undefined } = options.innerTx === true
37
+ ? { contractId: null }
38
+ : await getAccount(await options.onAccount.address(options), options)
39
+
40
+ const signed = contractId != null
41
+ // TODO: not required arguments become required depending on account type, can ga be extracted?
42
+ ? await signUsingGA(tx, { authData: {}, ...options, authFun: authFun as string })
43
+ : await options.onAccount.signTransaction(tx, options)
44
+
45
+ return options.innerTx === true
46
+ ? { hash: buildTxHash(signed), rawTx: signed }
47
+ : await sendTransaction(signed, options)
48
+ }
49
+
50
+ type SendOptionsType = Parameters<AccountBase['signTransaction']>[1] & Parameters<typeof sendTransaction>[1]
51
+ & Partial<Omit<Parameters<typeof signUsingGA>[1], 'onAccount' | 'onCompiler'>>
52
+ & Pick<Parameters<typeof signUsingGA>[1], 'onAccount' | 'onCompiler'>
53
+ export interface SendOptions extends SendOptionsType {}
54
+ interface SendReturnType extends Awaited<ReturnType<typeof sendTransaction>> {}
55
+
56
+ export async function signUsingGA (
57
+ tx: EncodedData<'tx'>,
58
+ { authData, authFun, ...options }: {
59
+ authData: Parameters<typeof createMetaTx>[1]
60
+ authFun: Parameters<typeof createMetaTx>[2]
61
+ } & Parameters<typeof createMetaTx>[3]
62
+ ): Promise<EncodedData<'tx'>> {
63
+ return await createMetaTx(tx, authData, authFun, options)
64
+ }
65
+
66
+ /**
67
+ * Send coins to another account
68
+ * @param amount - Amount to spend
69
+ * @param recipientIdOrName - Address or name of recipient account
70
+ * @param options - Options
71
+ * @returns Transaction
72
+ */
73
+ export async function spend (
74
+ amount: number | string,
75
+ recipientIdOrName: EncodedData<'ak'> | AensName,
76
+ options: SpendOptions
77
+ ): ReturnType<typeof send> {
78
+ return await send(
79
+ await _buildTx(TX_TYPE.spend, {
80
+ ...options,
81
+ senderId: await options.onAccount.address(options),
82
+ recipientId: await resolveName(recipientIdOrName, 'account_pubkey', options),
83
+ amount
84
+ }),
85
+ options
86
+ )
87
+ }
88
+
89
+ type SpendOptionsType = BuildTxOptions<TX_TYPE.spend, 'senderId' | 'recipientId' | 'amount'>
90
+ & Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions
91
+ interface SpendOptions extends SpendOptionsType {}
92
+
93
+ // TODO: Rename to spendFraction
94
+ /**
95
+ * Send a fraction of coin balance to another account
96
+ * @param fraction - Fraction of balance to spend (between 0 and 1)
97
+ * @param recipientIdOrName - Address or name of recipient account
98
+ * @param options - Options
99
+ * @returns Transaction
100
+ */
101
+ export async function transferFunds (
102
+ fraction: number | string,
103
+ recipientIdOrName: AensName | EncodedData<'ak'>,
104
+ options: TransferFundsOptions
105
+ ): ReturnType<typeof send> {
106
+ if (fraction < 0 || fraction > 1) {
107
+ throw new ArgumentError('fraction', 'a number between 0 and 1', fraction)
108
+ }
109
+ const recipientId = await resolveName<'ak'>(recipientIdOrName, 'account_pubkey', options)
110
+ const senderId = await options.onAccount.address(options)
111
+ const balance = new BigNumber(
112
+ await getBalance.bind(options.onAccount)(senderId, options)
113
+ )
114
+ const desiredAmount = balance.times(fraction).integerValue(BigNumber.ROUND_HALF_UP)
115
+ const { tx: { fee } } = unpackTx(
116
+ await _buildTx(TX_TYPE.spend, { ...options, senderId, recipientId, amount: desiredAmount }),
117
+ TX_TYPE.spend
118
+ )
119
+ // Reducing of the amount may reduce transaction fee, so this is not completely accurate
120
+ const amount = desiredAmount.plus(fee).gt(balance) ? balance.minus(fee) : desiredAmount
121
+ return await send(
122
+ await _buildTx(TX_TYPE.spend, { ...options, senderId, recipientId, amount }),
123
+ options
124
+ )
125
+ }
126
+
127
+ type TransferFundsOptionsType = BuildTxOptions<TX_TYPE.spend, 'senderId' | 'recipientId' | 'amount'>
128
+ & Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions
129
+ interface TransferFundsOptions extends TransferFundsOptionsType {}
130
+
131
+ /**
132
+ * Submit transaction of another account paying for it (fee and gas)
133
+ * @param transaction - tx_<base64>-encoded transaction
134
+ * @param options - Options
135
+ * @returns Object Transaction
136
+ */
137
+ export async function payForTransaction (
138
+ transaction: EncodedData<'tx'>, options: PayForTransactionOptions
139
+ ): ReturnType<typeof send> {
140
+ return await send(
141
+ await _buildTx(
142
+ TX_TYPE.payingFor,
143
+ { ...options, payerId: await options.onAccount.address(options), tx: transaction }
144
+ ),
145
+ options
146
+ )
147
+ }
148
+
149
+ interface PayForTransactionOptions extends
150
+ BuildTxOptions<TX_TYPE.payingFor, 'payerId' | 'tx'>, SendOptions {
151
+ onAccount: AccountBase
152
+ }