@witnet/sdk 1.1.5 → 1.2.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 (192) hide show
  1. package/.env_witnet +13 -1
  2. package/dist/package.json +31 -24
  3. package/dist/src/bin/helpers.d.ts +59 -49
  4. package/dist/src/bin/helpers.d.ts.map +1 -1
  5. package/dist/src/bin/helpers.js +228 -229
  6. package/dist/src/index.d.ts +3 -4
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +4 -47
  9. package/dist/src/lib/crypto/account.d.ts +3 -3
  10. package/dist/src/lib/crypto/account.d.ts.map +1 -1
  11. package/dist/src/lib/crypto/account.js +31 -25
  12. package/dist/src/lib/crypto/coinbase.d.ts +4 -4
  13. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -1
  14. package/dist/src/lib/crypto/coinbase.js +8 -13
  15. package/dist/src/lib/crypto/index.d.ts +7 -7
  16. package/dist/src/lib/crypto/index.d.ts.map +1 -1
  17. package/dist/src/lib/crypto/index.js +7 -30
  18. package/dist/src/lib/crypto/interfaces.d.ts +5 -5
  19. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -1
  20. package/dist/src/lib/crypto/interfaces.js +2 -3
  21. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +5 -5
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +98 -85
  24. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +3 -4
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -1
  26. package/dist/src/lib/crypto/payloads/StakePayload.js +81 -71
  27. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +4 -5
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -1
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.js +36 -43
  30. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +3 -4
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -1
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +46 -48
  33. package/dist/src/lib/crypto/payloads.d.ts +5 -5
  34. package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
  35. package/dist/src/lib/crypto/payloads.js +44 -45
  36. package/dist/src/lib/crypto/signer.d.ts +3 -3
  37. package/dist/src/lib/crypto/signer.d.ts.map +1 -1
  38. package/dist/src/lib/crypto/signer.js +45 -88
  39. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +6 -6
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
  41. package/dist/src/lib/crypto/transmitters/DataRequests.js +6 -10
  42. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +5 -5
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -1
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +7 -11
  45. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +6 -7
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -1
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +9 -13
  48. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +5 -5
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -1
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +6 -10
  51. package/dist/src/lib/crypto/transmitters.d.ts +6 -6
  52. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
  53. package/dist/src/lib/crypto/transmitters.js +89 -76
  54. package/dist/src/lib/crypto/types.d.ts +1 -2
  55. package/dist/src/lib/crypto/types.d.ts.map +1 -1
  56. package/dist/src/lib/crypto/types.js +71 -67
  57. package/dist/src/lib/crypto/utils.d.ts +5 -5
  58. package/dist/src/lib/crypto/utils.d.ts.map +1 -1
  59. package/dist/src/lib/crypto/utils.js +48 -66
  60. package/dist/src/lib/crypto/wallet.d.ts +3 -3
  61. package/dist/src/lib/crypto/wallet.d.ts.map +1 -1
  62. package/dist/src/lib/crypto/wallet.js +72 -89
  63. package/dist/src/lib/index.d.ts +5 -4
  64. package/dist/src/lib/index.d.ts.map +1 -1
  65. package/dist/src/lib/index.js +6 -44
  66. package/dist/src/lib/radon/ccdr/eth.d.ts +1 -1
  67. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -1
  68. package/dist/src/lib/radon/ccdr/eth.js +95 -83
  69. package/dist/src/lib/radon/ccdr/index.d.ts +2 -2
  70. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -1
  71. package/dist/src/lib/radon/ccdr/index.js +3 -39
  72. package/dist/src/lib/radon/ccdr/wit.d.ts +2 -2
  73. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
  74. package/dist/src/lib/radon/ccdr/wit.js +17 -19
  75. package/dist/src/lib/radon/filters.d.ts.map +1 -1
  76. package/dist/src/lib/radon/filters.js +23 -19
  77. package/dist/src/lib/radon/index.d.ts +10 -11
  78. package/dist/src/lib/radon/index.d.ts.map +1 -1
  79. package/dist/src/lib/radon/index.js +205 -187
  80. package/dist/src/lib/radon/reducers.d.ts +2 -2
  81. package/dist/src/lib/radon/reducers.d.ts.map +1 -1
  82. package/dist/src/lib/radon/reducers.js +48 -34
  83. package/dist/src/lib/radon/types.d.ts +2 -2
  84. package/dist/src/lib/radon/types.d.ts.map +1 -1
  85. package/dist/src/lib/radon/types.js +80 -110
  86. package/dist/src/lib/radon/utils.d.ts +3 -3
  87. package/dist/src/lib/radon/utils.d.ts.map +1 -1
  88. package/dist/src/lib/radon/utils.js +49 -52
  89. package/dist/src/lib/rest/kermit.d.ts +20 -0
  90. package/dist/src/lib/rest/kermit.d.ts.map +1 -0
  91. package/dist/src/lib/rest/kermit.js +68 -0
  92. package/dist/src/lib/rest/types.d.ts +5 -0
  93. package/dist/src/lib/rest/types.d.ts.map +1 -0
  94. package/dist/src/lib/rest/types.js +2 -0
  95. package/dist/src/lib/rpc/index.d.ts +2 -2
  96. package/dist/src/lib/rpc/index.d.ts.map +1 -1
  97. package/dist/src/lib/rpc/index.js +3 -19
  98. package/dist/src/lib/rpc/nodes.d.ts +13 -13
  99. package/dist/src/lib/rpc/nodes.d.ts.map +1 -1
  100. package/dist/src/lib/rpc/nodes.js +69 -98
  101. package/dist/src/lib/rpc/provider.d.ts +4 -4
  102. package/dist/src/lib/rpc/provider.d.ts.map +1 -1
  103. package/dist/src/lib/rpc/provider.js +106 -122
  104. package/dist/src/lib/rpc/types.d.ts +2 -2
  105. package/dist/src/lib/rpc/types.d.ts.map +1 -1
  106. package/dist/src/lib/rpc/types.js +13 -16
  107. package/dist/src/lib/types.d.ts +5 -4
  108. package/dist/src/lib/types.d.ts.map +1 -1
  109. package/dist/src/lib/types.js +3 -9
  110. package/dist/src/lib/utils.d.ts +5 -5
  111. package/dist/src/lib/utils.d.ts.map +1 -1
  112. package/dist/src/lib/utils.js +40 -99
  113. package/dist/witnet/assets/index.cjs +6 -0
  114. package/dist/witnet/assets/index.d.cts +29 -0
  115. package/dist/witnet/assets/index.d.cts.map +1 -0
  116. package/dist/witnet/assets/modals/index.cjs +9 -0
  117. package/dist/witnet/assets/modals/index.d.cts +16 -0
  118. package/dist/witnet/assets/modals/index.d.cts.map +1 -0
  119. package/dist/witnet/assets/modals/web3/eth.cjs +23 -0
  120. package/dist/witnet/assets/modals/web3/eth.d.cts +4 -0
  121. package/dist/witnet/assets/modals/web3/eth.d.cts.map +1 -0
  122. package/dist/witnet/assets/modals/web3/ipfs.cjs +18 -0
  123. package/dist/witnet/assets/modals/web3/ipfs.d.cts +3 -0
  124. package/dist/witnet/assets/modals/web3/ipfs.d.cts.map +1 -0
  125. package/dist/witnet/assets/modals/web3/wit.cjs +24 -0
  126. package/dist/witnet/assets/modals/web3/wit.d.cts +3 -0
  127. package/dist/witnet/assets/modals/web3/wit.d.cts.map +1 -0
  128. package/dist/witnet/assets/requests.cjs +43 -0
  129. package/dist/witnet/assets/requests.d.cts +10 -0
  130. package/dist/witnet/assets/requests.d.cts.map +1 -0
  131. package/package.json +31 -24
  132. package/src/bin/bots/watcher.cjs +354 -0
  133. package/src/bin/cli/history.cjs +31 -0
  134. package/src/bin/cli/inspect.js +545 -471
  135. package/src/bin/cli/network.js +658 -557
  136. package/src/bin/cli/nodes.js +392 -332
  137. package/src/bin/cli/radon.js +1071 -844
  138. package/src/bin/cli/wallet.js +1317 -1074
  139. package/src/bin/helpers.js +969 -868
  140. package/src/bin/index.js +329 -0
  141. package/witnet/assets/_index.cjs +5 -0
  142. package/witnet/assets/_requests.cjs +25 -0
  143. package/witnet/assets/_sources.cjs +36 -0
  144. package/witnet/assets/_templates.cjs +36 -0
  145. package/witnet/assets/index.cjs +4 -0
  146. package/witnet/assets/modals/index.cjs +7 -0
  147. package/witnet/assets/modals/web3/eth.cjs +27 -0
  148. package/witnet/assets/modals/web3/ipfs.cjs +22 -0
  149. package/witnet/assets/modals/web3/wit.cjs +28 -0
  150. package/witnet/assets/requests.cjs +49 -0
  151. package/witnet/witnet copy.proto +457 -0
  152. package/witnet/witnet.proto +456 -0
  153. package/witnet/witnet_toolkit-1.6.7-x86_64-pc-windows-msvc.exe +0 -0
  154. package/witnet/witnet_toolkit-1.7.1-x86_64-pc-windows-msvc.exe +0 -0
  155. package/witnet/witnet_toolkit-2.0.0-rc.7-x86_64-pc-windows-msvc.exe +0 -0
  156. package/witnet/witnet_toolkit-2.0.2-x86_64-pc-windows-msvc.exe +0 -0
  157. package/witnet/witnet_toolkit-2.0.21-x86_64-pc-windows-msvc.exe +0 -0
  158. package/witnet/witnet_toolkit-2.0.7-x86_64-pc-windows-msvc.exe +0 -0
  159. package/witnet/witnet_toolkit-2.0.8-x86_64-pc-windows-msvc.exe +0 -0
  160. package/dist/witnet/assets/index.d.ts +0 -29
  161. package/dist/witnet/assets/index.d.ts.map +0 -1
  162. package/dist/witnet/assets/index.js +0 -6
  163. package/dist/witnet/assets/modals/index.d.ts +0 -16
  164. package/dist/witnet/assets/modals/index.d.ts.map +0 -1
  165. package/dist/witnet/assets/modals/index.js +0 -11
  166. package/dist/witnet/assets/modals/web3/eth.d.ts +0 -5
  167. package/dist/witnet/assets/modals/web3/eth.d.ts.map +0 -1
  168. package/dist/witnet/assets/modals/web3/eth.js +0 -26
  169. package/dist/witnet/assets/modals/web3/ipfs.d.ts +0 -4
  170. package/dist/witnet/assets/modals/web3/ipfs.d.ts.map +0 -1
  171. package/dist/witnet/assets/modals/web3/ipfs.js +0 -18
  172. package/dist/witnet/assets/modals/web3/wit.d.ts +0 -4
  173. package/dist/witnet/assets/modals/web3/wit.d.ts.map +0 -1
  174. package/dist/witnet/assets/modals/web3/wit.js +0 -17
  175. package/dist/witnet/assets/requests.d.ts +0 -11
  176. package/dist/witnet/assets/requests.d.ts.map +0 -1
  177. package/dist/witnet/assets/requests.js +0 -43
  178. package/src/bin/cli/history.js +0 -31
  179. package/src/bin/postinstall.js +0 -9
  180. package/src/bin/toolkit.js +0 -290
  181. package/witnet/assets/_index.js +0 -8
  182. package/witnet/assets/_requests.js +0 -25
  183. package/witnet/assets/_sources.js +0 -36
  184. package/witnet/assets/_templates.js +0 -36
  185. package/witnet/assets/index.js +0 -4
  186. package/witnet/assets/modals/index.js +0 -9
  187. package/witnet/assets/modals/web3/eth.js +0 -29
  188. package/witnet/assets/modals/web3/ipfs.js +0 -22
  189. package/witnet/assets/modals/web3/wit.js +0 -21
  190. package/witnet/assets/requests.js +0 -49
  191. /package/witnet/assets/modals/web3/{btc.js → btc.cjs} +0 -0
  192. /package/witnet/assets/modals/web3/{sol.js → sol.cjs} +0 -0
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ const { RadonModal, RadonScript, retrievals, types, } = require("../../../../dist/src/lib/radon/index.js");
3
+ module.exports = {
4
+ WitOracleEthBlockNumber: new RadonModal({
5
+ retrieval: retrievals.JsonRPC({
6
+ rpc: retrievals.rpc.eth.blockNumber(),
7
+ script: RadonScript(types.RadonString).asFloat().floor(),
8
+ }),
9
+ }),
10
+ WitOracleEthGetBalance: new RadonModal({
11
+ retrieval: retrievals.JsonRPC({
12
+ rpc: retrievals.rpc.eth.getBalance("\\0\\"),
13
+ script: RadonScript(types.RadonString).asFloat().floor(),
14
+ }),
15
+ }),
16
+ WitOracleEthGetTransactionReceipt: new RadonModal({
17
+ retrieval: retrievals.JsonRPC({
18
+ rpc: retrievals.rpc.eth.getTransactionByHash("\\0\\"),
19
+ script: RadonScript(types.RadonString).parseJSONMap(),
20
+ }),
21
+ }),
22
+ };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoLmNqcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3dpdG5ldC9hc3NldHMvbW9kYWxzL3dlYjMvZXRoLmNqcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLEtBQUssR0FDTCxHQUFHLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDaEIsdUJBQXVCLEVBQUUsSUFBSSxVQUFVLENBQUM7UUFDdkMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDN0IsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtZQUNyQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUU7U0FDeEQsQ0FBQztLQUNGLENBQUM7SUFDRixzQkFBc0IsRUFBRSxJQUFJLFVBQVUsQ0FBQztRQUN0QyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUM3QixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUMzQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUU7U0FDeEQsQ0FBQztLQUNGLENBQUM7SUFDRixpQ0FBaUMsRUFBRSxJQUFJLFVBQVUsQ0FBQztRQUNqRCxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUM3QixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDO1lBQ3JELE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRTtTQUNyRCxDQUFDO0tBQ0YsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7XHJcblx0UmFkb25Nb2RhbCxcclxuXHRSYWRvblNjcmlwdCxcclxuXHRyZXRyaWV2YWxzLFxyXG5cdHR5cGVzLFxyXG59ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2Rpc3Qvc3JjL2xpYi9yYWRvbi9pbmRleC5qc1wiKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFdpdE9yYWNsZUV0aEJsb2NrTnVtYmVyOiBuZXcgUmFkb25Nb2RhbCh7XHJcblx0XHRyZXRyaWV2YWw6IHJldHJpZXZhbHMuSnNvblJQQyh7XHJcblx0XHRcdHJwYzogcmV0cmlldmFscy5ycGMuZXRoLmJsb2NrTnVtYmVyKCksXHJcblx0XHRcdHNjcmlwdDogUmFkb25TY3JpcHQodHlwZXMuUmFkb25TdHJpbmcpLmFzRmxvYXQoKS5mbG9vcigpLFxyXG5cdFx0fSksXHJcblx0fSksXHJcblx0V2l0T3JhY2xlRXRoR2V0QmFsYW5jZTogbmV3IFJhZG9uTW9kYWwoe1xyXG5cdFx0cmV0cmlldmFsOiByZXRyaWV2YWxzLkpzb25SUEMoe1xyXG5cdFx0XHRycGM6IHJldHJpZXZhbHMucnBjLmV0aC5nZXRCYWxhbmNlKFwiXFxcXDBcXFxcXCIpLFxyXG5cdFx0XHRzY3JpcHQ6IFJhZG9uU2NyaXB0KHR5cGVzLlJhZG9uU3RyaW5nKS5hc0Zsb2F0KCkuZmxvb3IoKSxcclxuXHRcdH0pLFxyXG5cdH0pLFxyXG5cdFdpdE9yYWNsZUV0aEdldFRyYW5zYWN0aW9uUmVjZWlwdDogbmV3IFJhZG9uTW9kYWwoe1xyXG5cdFx0cmV0cmlldmFsOiByZXRyaWV2YWxzLkpzb25SUEMoe1xyXG5cdFx0XHRycGM6IHJldHJpZXZhbHMucnBjLmV0aC5nZXRUcmFuc2FjdGlvbkJ5SGFzaChcIlxcXFwwXFxcXFwiKSxcclxuXHRcdFx0c2NyaXB0OiBSYWRvblNjcmlwdCh0eXBlcy5SYWRvblN0cmluZykucGFyc2VKU09OTWFwKCksXHJcblx0XHR9KSxcclxuXHR9KSxcclxufTtcclxuIl19
@@ -0,0 +1,4 @@
1
+ export let WitOracleEthBlockNumber: any;
2
+ export let WitOracleEthGetBalance: any;
3
+ export let WitOracleEthGetTransactionReceipt: any;
4
+ //# sourceMappingURL=eth.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eth.d.cts","sourceRoot":"","sources":["../../../../../witnet/assets/modals/web3/eth.cjs"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ const { RadonModal, RadonScript, retrievals, types, } = require("../../../../dist/src/lib/radon/index.js");
3
+ module.exports = {
4
+ WitOracleIpfsFileExists: new RadonModal({
5
+ retrieval: retrievals.HttpHead({
6
+ script: RadonScript(types.RadonMap)
7
+ .getString("etag")
8
+ .slice(1, -1)
9
+ .match(types.RadonBoolean, { "\\0\\": true }, false),
10
+ }),
11
+ }),
12
+ WitOracleIpfsFileSha256: new RadonModal({
13
+ retrieval: retrievals.HttpGet({
14
+ script: RadonScript(types.RadonBytes).hash(),
15
+ }),
16
+ }),
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBmcy5janMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aXRuZXQvYXNzZXRzL21vZGFscy93ZWIzL2lwZnMuY2pzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEVBQ0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxVQUFVLEVBQ1YsS0FBSyxHQUNMLEdBQUcsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE9BQU8sR0FBRztJQUNoQix1QkFBdUIsRUFBRSxJQUFJLFVBQVUsQ0FBQztRQUN2QyxTQUFTLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5QixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7aUJBQ2pDLFNBQVMsQ0FBQyxNQUFNLENBQUM7aUJBQ2pCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1osS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDO1NBQ3JELENBQUM7S0FDRixDQUFDO0lBQ0YsdUJBQXVCLEVBQUUsSUFBSSxVQUFVLENBQUM7UUFDdkMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDN0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQzVDLENBQUM7S0FDRixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtcclxuXHRSYWRvbk1vZGFsLFxyXG5cdFJhZG9uU2NyaXB0LFxyXG5cdHJldHJpZXZhbHMsXHJcblx0dHlwZXMsXHJcbn0gPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vZGlzdC9zcmMvbGliL3JhZG9uL2luZGV4LmpzXCIpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0V2l0T3JhY2xlSXBmc0ZpbGVFeGlzdHM6IG5ldyBSYWRvbk1vZGFsKHtcclxuXHRcdHJldHJpZXZhbDogcmV0cmlldmFscy5IdHRwSGVhZCh7XHJcblx0XHRcdHNjcmlwdDogUmFkb25TY3JpcHQodHlwZXMuUmFkb25NYXApXHJcblx0XHRcdFx0LmdldFN0cmluZyhcImV0YWdcIilcclxuXHRcdFx0XHQuc2xpY2UoMSwgLTEpXHJcblx0XHRcdFx0Lm1hdGNoKHR5cGVzLlJhZG9uQm9vbGVhbiwgeyBcIlxcXFwwXFxcXFwiOiB0cnVlIH0sIGZhbHNlKSxcclxuXHRcdH0pLFxyXG5cdH0pLFxyXG5cdFdpdE9yYWNsZUlwZnNGaWxlU2hhMjU2OiBuZXcgUmFkb25Nb2RhbCh7XHJcblx0XHRyZXRyaWV2YWw6IHJldHJpZXZhbHMuSHR0cEdldCh7XHJcblx0XHRcdHNjcmlwdDogUmFkb25TY3JpcHQodHlwZXMuUmFkb25CeXRlcykuaGFzaCgpLFxyXG5cdFx0fSksXHJcblx0fSksXHJcbn07XHJcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export let WitOracleIpfsFileExists: any;
2
+ export let WitOracleIpfsFileSha256: any;
3
+ //# sourceMappingURL=ipfs.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipfs.d.cts","sourceRoot":"","sources":["../../../../../witnet/assets/modals/web3/ipfs.cjs"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ const { RadonModal, RadonScript, retrievals, types, } = require("../../../../dist/src/lib/radon/index.js");
3
+ module.exports = {
4
+ WitOracleWitGetBalance: new RadonModal({
5
+ retrieval: retrievals.JsonRPC({
6
+ rpc: retrievals.rpc.wit.getBalance("\\0\\"),
7
+ script: RadonScript(types.RadonString)
8
+ .parseJSONMap()
9
+ .getMap("result")
10
+ .values(),
11
+ }),
12
+ }),
13
+ WitOracleWitGetValueTransfer: new RadonModal({
14
+ retrieval: retrievals.JsonRPC({
15
+ rpc: retrievals.rpc.wit.getValueTransfer("\\0\\", "\\1\\"),
16
+ script: RadonScript(types.RadonString)
17
+ .parseJSONMap()
18
+ .getMap("result")
19
+ .getMap("\\1\\")
20
+ .values(),
21
+ }),
22
+ }),
23
+ };
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0LmNqcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3dpdG5ldC9hc3NldHMvbW9kYWxzL3dlYjMvd2l0LmNqcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLEtBQUssR0FDTCxHQUFHLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDaEIsc0JBQXNCLEVBQUUsSUFBSSxVQUFVLENBQUM7UUFDdEMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDN0IsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDM0MsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO2lCQUNwQyxZQUFZLEVBQUU7aUJBQ2QsTUFBTSxDQUFDLFFBQVEsQ0FBQztpQkFDaEIsTUFBTSxFQUFFO1NBQ1YsQ0FBQztLQUNGLENBQUM7SUFDRiw0QkFBNEIsRUFBRSxJQUFJLFVBQVUsQ0FBQztRQUM1QyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUM3QixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUMxRCxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7aUJBQ3BDLFlBQVksRUFBRTtpQkFDZCxNQUFNLENBQUMsUUFBUSxDQUFDO2lCQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUNmLE1BQU0sRUFBRTtTQUNWLENBQUM7S0FDRixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtcclxuXHRSYWRvbk1vZGFsLFxyXG5cdFJhZG9uU2NyaXB0LFxyXG5cdHJldHJpZXZhbHMsXHJcblx0dHlwZXMsXHJcbn0gPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vZGlzdC9zcmMvbGliL3JhZG9uL2luZGV4LmpzXCIpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0V2l0T3JhY2xlV2l0R2V0QmFsYW5jZTogbmV3IFJhZG9uTW9kYWwoe1xyXG5cdFx0cmV0cmlldmFsOiByZXRyaWV2YWxzLkpzb25SUEMoe1xyXG5cdFx0XHRycGM6IHJldHJpZXZhbHMucnBjLndpdC5nZXRCYWxhbmNlKFwiXFxcXDBcXFxcXCIpLFxyXG5cdFx0XHRzY3JpcHQ6IFJhZG9uU2NyaXB0KHR5cGVzLlJhZG9uU3RyaW5nKVxyXG5cdFx0XHRcdC5wYXJzZUpTT05NYXAoKVxyXG5cdFx0XHRcdC5nZXRNYXAoXCJyZXN1bHRcIilcclxuXHRcdFx0XHQudmFsdWVzKCksXHJcblx0XHR9KSxcclxuXHR9KSxcclxuXHRXaXRPcmFjbGVXaXRHZXRWYWx1ZVRyYW5zZmVyOiBuZXcgUmFkb25Nb2RhbCh7XHJcblx0XHRyZXRyaWV2YWw6IHJldHJpZXZhbHMuSnNvblJQQyh7XHJcblx0XHRcdHJwYzogcmV0cmlldmFscy5ycGMud2l0LmdldFZhbHVlVHJhbnNmZXIoXCJcXFxcMFxcXFxcIiwgXCJcXFxcMVxcXFxcIiksXHJcblx0XHRcdHNjcmlwdDogUmFkb25TY3JpcHQodHlwZXMuUmFkb25TdHJpbmcpXHJcblx0XHRcdFx0LnBhcnNlSlNPTk1hcCgpXHJcblx0XHRcdFx0LmdldE1hcChcInJlc3VsdFwiKVxyXG5cdFx0XHRcdC5nZXRNYXAoXCJcXFxcMVxcXFxcIilcclxuXHRcdFx0XHQudmFsdWVzKCksXHJcblx0XHR9KSxcclxuXHR9KSxcclxufTtcclxuIl19
@@ -0,0 +1,3 @@
1
+ export let WitOracleWitGetBalance: any;
2
+ export let WitOracleWitGetValueTransfer: any;
3
+ //# sourceMappingURL=wit.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wit.d.cts","sourceRoot":"","sources":["../../../../../witnet/assets/modals/web3/wit.cjs"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ const { RadonRequest, RadonScript, filters, reducers, retrievals, types, } = require("../../dist/src/lib/radon/index.js");
3
+ module.exports = {
4
+ defi: {
5
+ tickers: {
6
+ crypto: {
7
+ WitOracleRequestPriceCryptoWitUsdt6: new RadonRequest({
8
+ sources: [
9
+ retrievals.HttpGet({
10
+ url: "https://api.mexc.com/api/v3/ticker/price?symbol=WITUSDT",
11
+ script: RadonScript(types.RadonString)
12
+ .parseJSONMap()
13
+ .getFloat("price")
14
+ .multiply(1e6)
15
+ .round(),
16
+ }),
17
+ ],
18
+ sourcesReducer: reducers.Median(filters.Stdev(1.4)),
19
+ witnessReducer: reducers.PriceTally(),
20
+ }),
21
+ WitOracleRequestPriceCryptoUsdtWit9: new RadonRequest({
22
+ sources: [
23
+ retrievals.HttpGet({
24
+ url: "https://api.mexc.com/api/v3/ticker/price?symbol=WITUSDT",
25
+ script: RadonScript(types.RadonString)
26
+ .parseJSONMap()
27
+ .getFloat("price")
28
+ .multiply(1e6)
29
+ .round(),
30
+ }),
31
+ ],
32
+ sourcesReducer: reducers.Median(filters.Stdev(1.4)),
33
+ witnessReducer: reducers.PriceTally(),
34
+ }),
35
+ },
36
+ },
37
+ },
38
+ WitOracleRequestRandomness: new RadonRequest({
39
+ sources: retrievals.RNG(),
40
+ witnessReducer: reducers.ConcatHash(),
41
+ }),
42
+ };
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdHMuY2pzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vd2l0bmV0L2Fzc2V0cy9yZXF1ZXN0cy5janMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLEVBQ1IsVUFBVSxFQUNWLEtBQUssR0FDTCxHQUFHLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDaEIsSUFBSSxFQUFFO1FBQ0wsT0FBTyxFQUFFO1lBQ1IsTUFBTSxFQUFFO2dCQUNQLG1DQUFtQyxFQUFFLElBQUksWUFBWSxDQUFDO29CQUNyRCxPQUFPLEVBQUU7d0JBQ1IsVUFBVSxDQUFDLE9BQU8sQ0FBQzs0QkFDbEIsR0FBRyxFQUFFLHlEQUF5RDs0QkFDOUQsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO2lDQUNwQyxZQUFZLEVBQUU7aUNBQ2QsUUFBUSxDQUFDLE9BQU8sQ0FBQztpQ0FDakIsUUFBUSxDQUFDLEdBQUcsQ0FBQztpQ0FDYixLQUFLLEVBQUU7eUJBQ1QsQ0FBQztxQkFDRjtvQkFDRCxjQUFjLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRCxjQUFjLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRTtpQkFDckMsQ0FBQztnQkFDRixtQ0FBbUMsRUFBRSxJQUFJLFlBQVksQ0FBQztvQkFDckQsT0FBTyxFQUFFO3dCQUNSLFVBQVUsQ0FBQyxPQUFPLENBQUM7NEJBQ2xCLEdBQUcsRUFBRSx5REFBeUQ7NEJBQzlELE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztpQ0FDcEMsWUFBWSxFQUFFO2lDQUNkLFFBQVEsQ0FBQyxPQUFPLENBQUM7aUNBQ2pCLFFBQVEsQ0FBQyxHQUFHLENBQUM7aUNBQ2IsS0FBSyxFQUFFO3lCQUNULENBQUM7cUJBQ0Y7b0JBQ0QsY0FBYyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkQsY0FBYyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUU7aUJBQ3JDLENBQUM7YUFDRjtTQUNEO0tBQ0Q7SUFDRCwwQkFBMEIsRUFBRSxJQUFJLFlBQVksQ0FBQztRQUM1QyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUN6QixjQUFjLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRTtLQUNyQyxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtcclxuXHRSYWRvblJlcXVlc3QsXHJcblx0UmFkb25TY3JpcHQsXHJcblx0ZmlsdGVycyxcclxuXHRyZWR1Y2VycyxcclxuXHRyZXRyaWV2YWxzLFxyXG5cdHR5cGVzLFxyXG59ID0gcmVxdWlyZShcIi4uLy4uL2Rpc3Qvc3JjL2xpYi9yYWRvbi9pbmRleC5qc1wiKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdGRlZmk6IHtcclxuXHRcdHRpY2tlcnM6IHtcclxuXHRcdFx0Y3J5cHRvOiB7XHJcblx0XHRcdFx0V2l0T3JhY2xlUmVxdWVzdFByaWNlQ3J5cHRvV2l0VXNkdDY6IG5ldyBSYWRvblJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0c291cmNlczogW1xyXG5cdFx0XHRcdFx0XHRyZXRyaWV2YWxzLkh0dHBHZXQoe1xyXG5cdFx0XHRcdFx0XHRcdHVybDogXCJodHRwczovL2FwaS5tZXhjLmNvbS9hcGkvdjMvdGlja2VyL3ByaWNlP3N5bWJvbD1XSVRVU0RUXCIsXHJcblx0XHRcdFx0XHRcdFx0c2NyaXB0OiBSYWRvblNjcmlwdCh0eXBlcy5SYWRvblN0cmluZylcclxuXHRcdFx0XHRcdFx0XHRcdC5wYXJzZUpTT05NYXAoKVxyXG5cdFx0XHRcdFx0XHRcdFx0LmdldEZsb2F0KFwicHJpY2VcIilcclxuXHRcdFx0XHRcdFx0XHRcdC5tdWx0aXBseSgxZTYpXHJcblx0XHRcdFx0XHRcdFx0XHQucm91bmQoKSxcclxuXHRcdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0c291cmNlc1JlZHVjZXI6IHJlZHVjZXJzLk1lZGlhbihmaWx0ZXJzLlN0ZGV2KDEuNCkpLFxyXG5cdFx0XHRcdFx0d2l0bmVzc1JlZHVjZXI6IHJlZHVjZXJzLlByaWNlVGFsbHkoKSxcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRXaXRPcmFjbGVSZXF1ZXN0UHJpY2VDcnlwdG9Vc2R0V2l0OTogbmV3IFJhZG9uUmVxdWVzdCh7XHJcblx0XHRcdFx0XHRzb3VyY2VzOiBbXHJcblx0XHRcdFx0XHRcdHJldHJpZXZhbHMuSHR0cEdldCh7XHJcblx0XHRcdFx0XHRcdFx0dXJsOiBcImh0dHBzOi8vYXBpLm1leGMuY29tL2FwaS92My90aWNrZXIvcHJpY2U/c3ltYm9sPVdJVFVTRFRcIixcclxuXHRcdFx0XHRcdFx0XHRzY3JpcHQ6IFJhZG9uU2NyaXB0KHR5cGVzLlJhZG9uU3RyaW5nKVxyXG5cdFx0XHRcdFx0XHRcdFx0LnBhcnNlSlNPTk1hcCgpXHJcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RmxvYXQoXCJwcmljZVwiKVxyXG5cdFx0XHRcdFx0XHRcdFx0Lm11bHRpcGx5KDFlNilcclxuXHRcdFx0XHRcdFx0XHRcdC5yb3VuZCgpLFxyXG5cdFx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRzb3VyY2VzUmVkdWNlcjogcmVkdWNlcnMuTWVkaWFuKGZpbHRlcnMuU3RkZXYoMS40KSksXHJcblx0XHRcdFx0XHR3aXRuZXNzUmVkdWNlcjogcmVkdWNlcnMuUHJpY2VUYWxseSgpLFxyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHR9LFxyXG5cdFx0fSxcclxuXHR9LFxyXG5cdFdpdE9yYWNsZVJlcXVlc3RSYW5kb21uZXNzOiBuZXcgUmFkb25SZXF1ZXN0KHtcclxuXHRcdHNvdXJjZXM6IHJldHJpZXZhbHMuUk5HKCksXHJcblx0XHR3aXRuZXNzUmVkdWNlcjogcmVkdWNlcnMuQ29uY2F0SGFzaCgpLFxyXG5cdH0pLFxyXG59O1xyXG4iXX0=
@@ -0,0 +1,10 @@
1
+ export namespace defi {
2
+ namespace tickers {
3
+ namespace crypto {
4
+ let WitOracleRequestPriceCryptoWitUsdt6: any;
5
+ let WitOracleRequestPriceCryptoUsdtWit9: any;
6
+ }
7
+ }
8
+ }
9
+ export let WitOracleRequestRandomness: any;
10
+ //# sourceMappingURL=requests.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.cts","sourceRoot":"","sources":["../../../witnet/assets/requests.cjs"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,20 +1,21 @@
1
1
  {
2
2
  "name": "@witnet/sdk",
3
- "version": "1.1.5",
3
+ "version": "1.2.0",
4
4
  "description": "Typescript library and CLI tooling for Web3 buidlers willing to interact with the Witnet blockchain.",
5
5
  "author": "Witnet Foundation",
6
6
  "license": "MIT",
7
7
  "private": false,
8
- "type": "commonjs",
8
+ "type": "module",
9
9
  "bin": {
10
- "witsdk": "src/bin/toolkit.js",
11
- "witnet-sdk": "src/bin/toolkit.js"
10
+ "watcher": "src/bin/bots/watcher.cjs",
11
+ "witsdk": "src/bin/index.js",
12
+ "witnet-sdk": "src/bin/index.js"
12
13
  },
13
14
  "files": [
14
15
  "dist",
16
+ "src/assets",
15
17
  "src/bin",
16
- "witnet/witnet.proto.json",
17
- "witnet/assets",
18
+ "witnet",
18
19
  ".env_witnet"
19
20
  ],
20
21
  "exports": {
@@ -23,7 +24,11 @@
23
24
  "require": "./dist/src/index.js",
24
25
  "default": "./dist/src/index.js"
25
26
  },
26
- "./assets": "./dist/witnet/assets/index.js",
27
+ "./assets": {
28
+ "types": "./dist/witnet/assets/*.d.cts",
29
+ "require": "./witnet/assets/index.cjs",
30
+ "default": "./witnet/assets/index.cjs"
31
+ },
27
32
  "./utils": {
28
33
  "types": "./dist/src/lib/*.d.ts",
29
34
  "require": "./dist/src/lib/utils.js",
@@ -33,40 +38,42 @@
33
38
  "types": "./dist",
34
39
  "dependencies": {
35
40
  "@bitcoinerlab/secp256k1": "^1.2.0",
36
- "axios": "^1.12.2",
41
+ "axios": "^1.13.2",
37
42
  "bech32": "~2.0.0",
38
- "bip32": "^4.0.0",
43
+ "bip32": "^5.0.0",
39
44
  "cbor": "^10.0.11",
40
- "dotenv": "^16.6.1",
45
+ "commander": "^14.0.2",
46
+ "dotenv": "^17.2.3",
41
47
  "ethers": "^6.15.0",
42
48
  "graphql-query-compress": "1.2.4",
43
- "inquirer": "^12.9.6",
49
+ "inquirer": "^12.10.0",
44
50
  "json-bigint": "^1.0.0",
45
51
  "keccak256": "^1.0.6",
46
52
  "lodash.merge": "^4.6.2",
47
53
  "long": "^5.3.2",
48
54
  "moment": "^2.30.1",
49
- "promise-poller": "~1.9.1",
55
+ "node-cron": "^4.2.1",
56
+ "promise-poller": "^1.9.1",
50
57
  "protobufjs": "^7.5.4",
51
58
  "qrcode-terminal": "^0.12.0",
52
59
  "secp256k1": "^5.0.1"
53
60
  },
54
61
  "devDependencies": {
55
- "@types/node": "^22.18.5",
62
+ "@biomejs/biome": "^2.3.4",
63
+ "@types/cbor": "^5.0.1",
64
+ "@types/json-bigint": "^1.0.4",
65
+ "@types/node": "^24.10.0",
66
+ "@types/promise-poller": "^1.7.4",
56
67
  "cross-env": "10.0.0",
57
- "eslint": "8.56.0",
58
- "eslint-config-standard": "^17.1.0",
59
- "eslint-plugin-import": "^2.32.0",
60
- "eslint-plugin-n": "^17.23.0",
61
- "eslint-plugin-promise": "^7.2.1",
62
68
  "protobufjs-cli": "^1.1.3",
63
- "typescript": "^5.9.2"
69
+ "typescript": "^5.9.3"
64
70
  },
65
71
  "scripts": {
66
- "build": "pbjs --target json witnet/witnet.proto -o witnet/witnet.proto.json && tsc -p tsconfig.json",
67
- "fmt": "eslint --ext .js,.cjs . --ignore-path .gitignore --ignore-pattern _*",
68
- "fmt!": "eslint --ext .js,.cjs . --fix --ignore-path .gitignore --ignore-pattern _*",
69
- "postinstall": "node src/bin/postinstall.js",
70
- "test": "cross-env-shell WITNET_SDK_RADON_ASSETS_PATH='../../../witnet/assets' node ./src/bin/toolkit.js"
72
+ "build": "pbjs --target json witnet/witnet.proto -o witnet/witnet.proto.json && npm run clean && tsc -p tsconfig.json",
73
+ "clean": "node ./scripts/clean.cjs dist",
74
+ "fmt": "npx biome check",
75
+ "fmt!": "npx biome check --write --unsafe",
76
+ "postinstall": "node scripts/postinstall.cjs",
77
+ "witsdk": "cross-env-shell WITNET_SDK_RADON_ASSETS_PATH='../../../witnet/assets' node ./src/bin/index.js"
71
78
  }
72
79
  }
@@ -0,0 +1,354 @@
1
+ const cron = require("node-cron");
2
+ require("dotenv").config({ quiet: true, path: _spliceFromArgs(process.argv, `--config-path`) });
3
+ const { Command } = require("commander");
4
+ const moment = require("moment")
5
+ const program = new Command();
6
+
7
+ const { utils, Witnet } = require("../../../dist/src/index.js");
8
+ const { version } = require("../../../package.json");
9
+
10
+ const CHECK_BALANCE_SCHEDULE =
11
+ process.env.WITNET_SDK_WATCHER_BALANCE_SCHEDULE || "*/15 * * * *"; // every 15 minutes
12
+ const DRY_RUN_SCHEDULE = process.env.WITNET_SDK_WATCHER_DRY_RUN_SCHEDULE || "* * * * *" // every minute
13
+ const WIT_WALLET_MASTER_KEY = process.env.WITNET_SDK_WALLET_MASTER_KEY;
14
+
15
+ const lastUpdate = {}
16
+
17
+ main();
18
+
19
+ async function main() {
20
+ const headline = `WITNET WATCHER BOT v${version}`;
21
+ console.info("=".repeat(120));
22
+ console.info(headline);
23
+
24
+ program
25
+ .name("npx --package @witnet/sdk watcher")
26
+ .description("Watcher bot for polling and notarizing data feed updates in Witnet.")
27
+ .version(version);
28
+
29
+ program
30
+ .option(
31
+ "--cooldown <secs>",
32
+ "Min. amount of seconds that must elapse before notarizing the next data update in Witnet.",
33
+ process.env.WITNET_SDK_WATCHER_WIT_COOLDOWN_SECS || 900
34
+ )
35
+ .option(
36
+ "--deviation <percentage>",
37
+ "Deviation percentage threshold that will force notarizing a data update in Witnet (numeric data feeds only).",
38
+ process.env.WITNET_SDK_WATCHER_WIT_DEVIATION_PERCENTAGE
39
+ )
40
+ .option(
41
+ "--heartbeat <secs>",
42
+ "If set, max. amount of seconds between data feed updates in Witnet.",
43
+ process.env.WITNET_SDK_WATCHER_WIT_HEARTBEAT_SECS
44
+ )
45
+ .option(
46
+ "--min-balance <wits>",
47
+ "Min. balance threshold",
48
+ process.env.WITNET_SDK_WATCHER_WIT_MIN_BALANCE || 1000.0,
49
+ )
50
+ .option(
51
+ "--network <mainnet|testnet|url>",
52
+ "The name of the Witnet network, or the WIT/RPC provider URL, to connect to.",
53
+ process.env.WITNET_SDK_WATCHER_WIT_NETWORK
54
+ || process.env.WITNET_SDK_PROVIDER_URL
55
+ || "mainnet"
56
+ )
57
+ .option(
58
+ "--priority <priority>",
59
+ "Network priority when notarizing data updates in Witnet.",
60
+ process.env.WITNET_SDK_WATCHER_WIT_NETWORK_PRIORITY ||
61
+ Witnet.TransactionPriority.Medium,
62
+ )
63
+ .option(
64
+ "--notarize-errors",
65
+ "If set, eventual data retrieving errors will also get notarized."
66
+ )
67
+ .option(
68
+ "--signer <wit_pkh>",
69
+ "Witnet public key hash in charge of notarizing data updates.",
70
+ process.env.WITNET_SDK_WATCHER_WIT_SIGNER,
71
+ )
72
+ .option(
73
+ "--target <hex>",
74
+ "Either the RAD hash or the actual bytecode of the Radon Request used for detecting data updates.",
75
+ process.env.WITNET_SDK_WATCHER_WIT_RADON_REQUEST
76
+ )
77
+ .option(
78
+ "--witnesses <number>",
79
+ "Size of the witnessing committee when notarizing data updates in Witnet.",
80
+ process.env.WITNET_SDK_WATCHER_WIT_WITNESSES || undefined,
81
+ )
82
+
83
+ program.parse();
84
+
85
+ let { deviation, minBalance } = program.opts();
86
+ const {
87
+ debug,
88
+ target,
89
+ cooldown,
90
+ heartbeat,
91
+ network,
92
+ notarizeErrors,
93
+ priority,
94
+ signer,
95
+ witnesses
96
+ } = program.opts();
97
+
98
+ if (!debug) console.debug = () => {};
99
+
100
+ if (!WIT_WALLET_MASTER_KEY) {
101
+ console.error(
102
+ `❌ Fatal: a Witnet wallet's master key is not settled on this environment.`,
103
+ );
104
+ process.exit(0);
105
+ }
106
+
107
+ const provider = network === "mainnet" ? "https://rpc-01.witnet.io" : (network === "testnet" ? "https://rpc-testnet.witnet.io" : network)
108
+ const wallet = await Witnet.Wallet.fromXprv(WIT_WALLET_MASTER_KEY, {
109
+ limit: 1,
110
+ provider: await Witnet.JsonRpcProvider.fromURL(provider),
111
+ });
112
+ const ledger = wallet.getSigner(signer || wallet.coinbase.pkh);
113
+ if (!ledger) {
114
+ console.error(
115
+ `❌ Fatal: hot wallet address ${signer} not found in wallet!`,
116
+ );
117
+ process.exit(0);
118
+ }
119
+
120
+ console.info(`Wit/RPC provider: ${provider}`);
121
+ console.info(
122
+ `Witnet network: WITNET:${wallet.provider.network.toUpperCase()} (${wallet.provider.networkId.toString(16)})`,
123
+ );
124
+ console.info(`Witnet hot wallet: ${ledger.pkh}`);
125
+ console.info(`Network priority: ${priority.toUpperCase()}`);
126
+ console.info(
127
+ `Balance threshold: ${Witnet.Coins.fromWits(minBalance).toString(2)}`,
128
+ );
129
+
130
+ if (!target || !utils.isHexString(target)) {
131
+ console.error(
132
+ `❌ Fatal: a valid hex string must be provided as --target.`,
133
+ );
134
+ process.exit(0);
135
+ }
136
+
137
+ let request
138
+ try {
139
+ request = Witnet.Radon.RadonRequest.fromBytecode(target)
140
+ } catch {
141
+ const txs = await wallet.provider.searchDataRequests(target, { limit: 1, mode: "ethereal" })
142
+ if (txs.length > 0 && txs[0]?.query) {
143
+ const bytecode = txs[0].query.rad_bytecode
144
+ request = Witnet.Radon.RadonRequest.fromBytecode(bytecode)
145
+
146
+ } else {
147
+ console.error(
148
+ `❌ Fatal: provided --target is not a valid Radon Request bytecode nor a known Radon Request hash.`
149
+ )
150
+ process.exit(0)
151
+ }
152
+ }
153
+
154
+ const dataType = request.dataType
155
+ const authorities = request.sources.map(source => source.authority.split(".").slice(-2)[0].toUpperCase())
156
+ console.info(`Radon bytecode: ${request.toBytecode()}`)
157
+ console.info(`Radon RAD hash: ${request.radHash}`)
158
+ console.info(`Radon data type: ${dataType}`)
159
+ console.info(`Data authorities: ${authorities}`)
160
+ if (heartbeat) console.info(`Update heartbeat: ${_commas(heartbeat)} "`);
161
+ if (cooldown) console.info(`Update cool-down: ${_commas(cooldown)} "`);
162
+
163
+ // validate deviation parameter, only on integer or float data feeds
164
+ if (["RadonInteger", "RadonFloat"].includes(request.dataType)) {
165
+ deviation = parseFloat(deviation || 0.0)
166
+ console.info(`Update deviation: ${deviation.toFixed(2)} %`)
167
+ }
168
+
169
+ // create DR transaction factory
170
+ const DRs = Witnet.DataRequests.from(ledger, request);
171
+
172
+ // schedule signer's balance check
173
+ let balance = Witnet.Coins.fromPedros((await ledger.getBalance()).unlocked);
174
+ minBalance = Witnet.Coins.fromWits(minBalance)
175
+ console.info(
176
+ `Initial balance: ${balance.toString(2)}`,
177
+ );
178
+ if (balance.pedros < minBalance.pedros) {
179
+ console.error(
180
+ `❌ Fatal: hot wallet must be funded with at least ${minBalance.toString(2)}.`,
181
+ );
182
+ process.exit(0);
183
+ } else {
184
+ if (!cron.validate(CHECK_BALANCE_SCHEDULE)) {
185
+ console.error(
186
+ `❌ Fatal: invalid check balance schedule: ${CHECK_BALANCE_SCHEDULE}`,
187
+ );
188
+ process.exit(0);
189
+ }
190
+ console.info(`Checking balance schedule: ${CHECK_BALANCE_SCHEDULE}`);
191
+ cron.schedule(CHECK_BALANCE_SCHEDULE, async () => checkWitnetBalance());
192
+ }
193
+
194
+ // schedule data feeding dry runs
195
+ if (!cron.validate(DRY_RUN_SCHEDULE)) {
196
+ console.error(
197
+ `❌ Fatal: invalid dry-run schedule: ${DRY_RUN_SCHEDULE}`,
198
+ )
199
+ process.exit(0)
200
+ }
201
+ console.info(`Dry running schedule: ${DRY_RUN_SCHEDULE}`)
202
+ cron.schedule(DRY_RUN_SCHEDULE, async () => dryRunRadonRequest(), { noOverlap: true })
203
+
204
+ // ----------------------------------------------------------------------------------------------------------------
205
+ async function dryRunRadonRequest() {
206
+ const tag = `[@witnet/sdk/watcher][witnet:${wallet.provider.network}]`
207
+ try {
208
+ let notarize = false
209
+ let dryrun = JSON.parse(await request.execDryRun())
210
+ let result
211
+ if (Object.keys(dryrun).includes("RadonError")) {
212
+ if (notarizeErrors) {
213
+ notarize = true
214
+ result = dryrun.RadonError
215
+ } else {
216
+ throw `Unexpected dry run error: ${JSON.stringify(result)}`
217
+ }
218
+
219
+ } else if (["RadonInteger", "RadonFloat"].includes(dataType) && Object.keys(dryrun).includes(`${dataType}`)) {
220
+ result = parseFloat(dryrun[`${dataType}`])
221
+ if (deviation && lastUpdate?.value) {
222
+ notarize = (Math.abs(result - lastUpdate.value) / lastUpdate.value) >= deviation
223
+ } else {
224
+ notarize = true
225
+ }
226
+
227
+ } else if (!lastUpdate?.value || lastUpdate.value !== result) {
228
+ notarize = true
229
+ }
230
+ console.info(`${tag} Dry run result => ${JSON.stringify(dryrun)}`)
231
+ const clock = Math.floor(Date.now() / 1000)
232
+ const elapsed = clock - (lastUpdate?.timestamp || (clock - cooldown - 1))
233
+ if (!notarize && heartbeat && elapsed >= heartbeat) {
234
+ console.info(`${tag} Notarizing data due to heartbeat after ${elapsed} secs ...`)
235
+ notarize = true
236
+ } else if (notarize) {
237
+ if (!cooldown || elapsed >= cooldown) {
238
+ console.info(`${tag} Notarizing possible data update as provided by ${authorities} ...`)
239
+ } else {
240
+ throw `Postponing possible data update as only ${elapsed} out of ${cooldown} secs elapsed since the last notarized update.`
241
+ }
242
+ }
243
+ if (notarize) {
244
+ lastUpdate.timestamp = clock
245
+ lastUpdate.value = result
246
+ return notarizeRadonRequest(tag)
247
+ }
248
+ } catch (err) {
249
+ console.warn(`${tag} ${err}`)
250
+ }
251
+ }
252
+
253
+ // ----------------------------------------------------------------------------------------------------------------
254
+ async function notarizeRadonRequest(tag) {
255
+ try {
256
+ // create, sign and send new data request transaction
257
+ let tx = await DRs.sendTransaction({ witnesses, fees: priority })
258
+ console.info(`${tag} RAD hash =>`, tx.radHash);
259
+ console.info(`${tag} DRT hash =>`, tx.hash);
260
+ console.info(`${tag} DRT weight =>`, _commas(tx.weight));
261
+ console.info(`${tag} DRT wtnsss =>`, tx.witnesses);
262
+ console.debug(
263
+ `${tag} DRT inputs =>`,
264
+ tx.tx?.DataRequest?.signatures.length,
265
+ );
266
+ console.info(
267
+ `${tag} DRT cost =>`,
268
+ Witnet.Coins.fromNanowits(
269
+ tx.fees.nanowits + tx.value?.nanowits,
270
+ ).toString(2),
271
+ );
272
+
273
+ // await inclusion in Witnet
274
+ tx = await DRs.confirmTransaction(tx.hash, {
275
+ onStatusChange: () => console.info(`${tag} DRT status =>`, tx.status),
276
+ }).catch((err) => {
277
+ throw err;
278
+ });
279
+
280
+ console.debug(
281
+ `${tag} Cache info after confirmation =>`,
282
+ ledger.cacheInfo,
283
+ );
284
+
285
+ // await resolution in Witnet
286
+ let status = tx.status;
287
+ do {
288
+ const report = await ledger.provider.getDataRequest(
289
+ tx.hash,
290
+ "ethereal",
291
+ );
292
+ if (report.status !== status) {
293
+ status = report.status;
294
+ console.info(`${tag} DRT status =>`, report.status);
295
+ }
296
+ if (report.status === "solved" && report?.result) {
297
+ lastUpdate.cborBytes = report.result.cbor_bytes
298
+ const result = utils.cbor.decode(
299
+ utils.fromHexString(report.result.cbor_bytes),
300
+ );
301
+ console.info(`${tag} DRT result =>`, result);
302
+ console.info(`${tag} DRT tmstmp =>`, moment.unix(report.result.timestamp));
303
+ lastUpdate.value = result
304
+ break;
305
+ }
306
+ const delay = (ms) =>
307
+ new Promise((_resolve) => setTimeout(_resolve, ms));
308
+ await delay(5000);
309
+ } while (status !== "solved");
310
+ } catch (err) {
311
+ console.warn(`${tag} ${err}`);
312
+ }
313
+ }
314
+
315
+ // ----------------------------------------------------------------------------------------------------------------
316
+ async function checkWitnetBalance() {
317
+ const tag = `[@witnet/sdk/watcher][witnet:${wallet.provider.network}:${ledger.pkh}]`
318
+ try {
319
+ balance = Witnet.Coins.fromPedros(
320
+ (await ledger.getBalance()).unlocked,
321
+ );
322
+ } catch (err) {
323
+ console.error(
324
+ `${tag} Cannot check balance: ${err}`,
325
+ );
326
+ }
327
+ console.info(
328
+ `${tag} Balance: ${balance.toString(2)}`,
329
+ );
330
+ if (balance.pedros < minBalance.pedros)
331
+ console.warn(
332
+ `${tag} Low funds !!!`,
333
+ );
334
+ return balance;
335
+ }
336
+ }
337
+
338
+ const _commas = (number) => {
339
+ const parts = number.toString().split(".");
340
+ const result =
341
+ parts.length <= 1
342
+ ? `${parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}`
343
+ : `${parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}.${parts[1]}`;
344
+ return result;
345
+ };
346
+
347
+ function _spliceFromArgs(args, flag) {
348
+ const argIndex = args.indexOf(flag)
349
+ if (argIndex >= 0 && args.length > argIndex + 1) {
350
+ const value = args[argIndex + 1]
351
+ args.splice(argIndex, 2)
352
+ return value
353
+ }
354
+ }
@@ -0,0 +1,31 @@
1
+ /// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
+ /// CLI SUBMODULE CONSTANTS ===========================================================================================
3
+
4
+ module.exports = {
5
+ flags: {
6
+ start: {
7
+ hint: "Epoch from which search starts (default: -2048).",
8
+ param: ":epoch",
9
+ },
10
+ end: {
11
+ hint: "Epoch on which search ends (default: -1).",
12
+ param: ":epoch",
13
+ },
14
+ limit: { hint: "Limit output records (default: 100).", param: ":number" },
15
+ },
16
+ router: {
17
+ miners: {
18
+ hint: "Report most successful miners.",
19
+ },
20
+ requests: {
21
+ hint: "Report most successful data requests.",
22
+ },
23
+ witnesses: {
24
+ hint: "Report most successful witnesses.",
25
+ },
26
+ },
27
+ subcommands: {},
28
+ };
29
+
30
+ /// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
31
+ /// CLI SUBMODULE COMMANDS ============================================================================================