opnet 1.0.13 → 1.0.15

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 (253) hide show
  1. package/CONTRIBUTING.md +71 -0
  2. package/README.md +6 -7
  3. package/browser/_version.d.ts +1 -1
  4. package/browser/abi/BaseContractProperty.d.ts +3 -0
  5. package/browser/abi/BitcoinAbiTypes.d.ts +4 -0
  6. package/browser/abi/BitcoinInterface.d.ts +9 -0
  7. package/browser/abi/interfaces/BaseContractProperties.d.ts +4 -0
  8. package/browser/abi/interfaces/BitcoinAbiValue.d.ts +5 -0
  9. package/browser/abi/interfaces/BitcoinInterfaceAbi.d.ts +11 -0
  10. package/browser/bitcoin/UTXOs.d.ts +1 -6
  11. package/browser/bitcoin/interfaces/IUTXO.d.ts +7 -0
  12. package/browser/common/CommonTypes.d.ts +1 -0
  13. package/browser/contracts/CallResult.d.ts +6 -3
  14. package/browser/contracts/Contract.d.ts +28 -0
  15. package/browser/contracts/interfaces/ICallResult.d.ts +2 -3
  16. package/browser/contracts/interfaces/IContract.d.ts +4 -0
  17. package/browser/crypto/crypto-browser.d.ts +7 -0
  18. package/browser/index.js +1 -1
  19. package/browser/opnet.d.ts +11 -0
  20. package/browser/scripts/testContract.d.ts +1 -0
  21. package/browser/scripts/testMethods.d.ts +1 -0
  22. package/browser/utils/BitcoinUtils.d.ts +4 -0
  23. package/build/_version.d.ts +1 -1
  24. package/build/_version.js +1 -1
  25. package/build/abi/BaseContractProperty.d.ts +3 -0
  26. package/build/abi/BaseContractProperty.js +1 -0
  27. package/build/abi/BitcoinAbiTypes.d.ts +4 -0
  28. package/build/abi/BitcoinAbiTypes.js +5 -0
  29. package/build/abi/BitcoinInterface.d.ts +9 -0
  30. package/build/abi/BitcoinInterface.js +45 -0
  31. package/build/abi/BitcoinInterfaceAbi.d.ts +3 -0
  32. package/build/abi/BitcoinInterfaceAbi.js +1 -0
  33. package/build/abi/enums/ParamTypes.d.ts +0 -0
  34. package/build/abi/enums/ParamTypes.js +1 -0
  35. package/build/abi/interface/BitcoinInterface.d.ts +6 -0
  36. package/build/abi/interface/BitcoinInterface.js +12 -0
  37. package/build/abi/interface/BitcoinInterfaceAbi.d.ts +3 -0
  38. package/build/abi/interface/BitcoinInterfaceAbi.js +1 -0
  39. package/build/abi/interfaces/BaseContractProperties.d.ts +4 -0
  40. package/build/abi/interfaces/BaseContractProperties.js +1 -0
  41. package/build/abi/interfaces/BaseContractProperty.d.ts +2 -0
  42. package/build/abi/interfaces/BaseContractProperty.js +1 -0
  43. package/build/abi/interfaces/BitcoinAbiInput.d.ts +5 -0
  44. package/build/abi/interfaces/BitcoinAbiInput.js +1 -0
  45. package/build/abi/interfaces/BitcoinAbiValue.d.ts +5 -0
  46. package/build/abi/interfaces/BitcoinAbiValue.js +1 -0
  47. package/build/abi/interfaces/BitcoinInterfaceAbi.d.ts +11 -0
  48. package/build/abi/interfaces/BitcoinInterfaceAbi.js +1 -0
  49. package/build/bitcoin/UTXOs.d.ts +1 -6
  50. package/build/bitcoin/interfaces/IUTXO.d.ts +7 -0
  51. package/build/bitcoin/interfaces/IUTXO.js +1 -0
  52. package/build/common/CommonTypes.d.ts +1 -0
  53. package/build/contracts/CallResult.d.ts +6 -3
  54. package/build/contracts/CallResult.js +9 -2
  55. package/build/contracts/Contract.d.ts +28 -0
  56. package/build/contracts/Contract.js +206 -0
  57. package/build/contracts/interfaces/ICallResult.d.ts +2 -3
  58. package/build/contracts/interfaces/IContract.d.ts +4 -0
  59. package/build/contracts/interfaces/IContract.js +1 -0
  60. package/build/interface/BitcoinInterface.d.ts +6 -0
  61. package/build/interface/BitcoinInterface.js +12 -0
  62. package/build/interface/BitcoinInterfaceAbi.d.ts +3 -0
  63. package/build/interface/BitcoinInterfaceAbi.js +1 -0
  64. package/build/interface/Interface.d.ts +2 -0
  65. package/build/interface/Interface.js +2 -0
  66. package/build/interface.d.ts +0 -0
  67. package/build/interface.js +1 -0
  68. package/build/opnet.d.ts +11 -0
  69. package/build/opnet.js +11 -0
  70. package/build/scripts/test.js +12 -0
  71. package/build/scripts/testContract.d.ts +1 -0
  72. package/build/scripts/testContract.js +28 -0
  73. package/build/scripts/testMethods.d.ts +1 -0
  74. package/build/scripts/testMethods.js +24 -0
  75. package/build/utils/BitcoinUtils.d.ts +4 -0
  76. package/build/utils/BitcoinUtils.js +7 -0
  77. package/cjs/_version.d.ts +1 -0
  78. package/cjs/_version.js +4 -0
  79. package/cjs/abi/BaseContractProperty.d.ts +3 -0
  80. package/cjs/abi/BaseContractProperty.js +2 -0
  81. package/cjs/abi/BitcoinAbiTypes.d.ts +4 -0
  82. package/cjs/abi/BitcoinAbiTypes.js +8 -0
  83. package/cjs/abi/BitcoinInterface.d.ts +9 -0
  84. package/cjs/abi/BitcoinInterface.js +49 -0
  85. package/cjs/abi/interfaces/BaseContractProperties.d.ts +4 -0
  86. package/cjs/abi/interfaces/BaseContractProperties.js +2 -0
  87. package/cjs/abi/interfaces/BitcoinAbiValue.d.ts +5 -0
  88. package/cjs/abi/interfaces/BitcoinAbiValue.js +2 -0
  89. package/cjs/abi/interfaces/BitcoinInterfaceAbi.d.ts +11 -0
  90. package/cjs/abi/interfaces/BitcoinInterfaceAbi.js +2 -0
  91. package/cjs/bitcoin/BitcoinAddress.d.ts +20 -0
  92. package/cjs/bitcoin/BitcoinAddress.js +116 -0
  93. package/cjs/bitcoin/UTXOs.d.ts +15 -0
  94. package/cjs/bitcoin/UTXOs.js +16 -0
  95. package/cjs/block/Block.d.ts +2 -3
  96. package/cjs/block/Block.js +3 -28
  97. package/cjs/block/interfaces/IBlock.d.ts +28 -0
  98. package/cjs/block/interfaces/IBlock.js +2 -0
  99. package/cjs/common/CommonTypes.d.ts +4 -0
  100. package/cjs/common/CommonTypes.js +2 -0
  101. package/cjs/contracts/CallResult.d.ts +13 -0
  102. package/cjs/contracts/CallResult.js +25 -0
  103. package/cjs/contracts/Contract.d.ts +28 -0
  104. package/cjs/contracts/Contract.js +212 -0
  105. package/cjs/contracts/ContractData.d.ts +15 -0
  106. package/cjs/contracts/ContractData.js +36 -0
  107. package/cjs/contracts/interfaces/IAccessList.d.ts +6 -0
  108. package/cjs/contracts/interfaces/IAccessList.js +2 -0
  109. package/cjs/contracts/interfaces/ICallResult.d.ts +11 -0
  110. package/cjs/contracts/interfaces/ICallResult.js +2 -0
  111. package/cjs/contracts/interfaces/IContract.d.ts +4 -0
  112. package/cjs/contracts/interfaces/IContract.js +2 -0
  113. package/cjs/contracts/interfaces/IRawContract.d.ts +13 -0
  114. package/cjs/contracts/interfaces/IRawContract.js +2 -0
  115. package/cjs/crypto/crypto.d.ts +2 -0
  116. package/cjs/crypto/crypto.js +8 -0
  117. package/cjs/index.d.ts +3 -11
  118. package/cjs/index.js +16 -11
  119. package/cjs/opnet.d.ts +36 -0
  120. package/cjs/opnet.js +54 -0
  121. package/cjs/providers/AbstractRpcProvider.d.ts +34 -0
  122. package/cjs/providers/AbstractRpcProvider.js +161 -0
  123. package/cjs/providers/JSONRpcProvider.d.ts +5 -9
  124. package/cjs/providers/JSONRpcProvider.js +4 -29
  125. package/cjs/providers/WebsocketRpcProvider.d.ts +8 -0
  126. package/cjs/providers/WebsocketRpcProvider.js +27 -0
  127. package/cjs/scripts/testContract.d.ts +1 -0
  128. package/cjs/scripts/testContract.js +30 -0
  129. package/cjs/scripts/testMethods.d.ts +1 -0
  130. package/cjs/scripts/testMethods.js +26 -0
  131. package/cjs/serialize/BigInt.d.ts +6 -0
  132. package/cjs/serialize/BigInt.js +5 -0
  133. package/cjs/storage/StoredValue.d.ts +10 -0
  134. package/cjs/storage/StoredValue.js +28 -0
  135. package/cjs/storage/interfaces/IStorageValue.d.ts +9 -0
  136. package/cjs/storage/interfaces/IStorageValue.js +2 -0
  137. package/cjs/transactions/DeploymentTransaction.d.ts +10 -1
  138. package/cjs/transactions/DeploymentTransaction.js +16 -0
  139. package/cjs/transactions/GenericTransaction.d.ts +1 -1
  140. package/cjs/transactions/InteractionTransaction.d.ts +1 -1
  141. package/cjs/transactions/Transaction.d.ts +1 -1
  142. package/cjs/transactions/Transaction.js +1 -1
  143. package/cjs/transactions/TransactionParser.d.ts +7 -0
  144. package/cjs/transactions/TransactionParser.js +32 -0
  145. package/cjs/transactions/TransactionReceipt.d.ts +10 -0
  146. package/cjs/transactions/TransactionReceipt.js +16 -0
  147. package/cjs/transactions/interfaces/ITransaction.d.ts +39 -0
  148. package/cjs/transactions/interfaces/ITransaction.js +2 -0
  149. package/cjs/transactions/interfaces/ITransactionReceipt.d.ts +8 -0
  150. package/cjs/transactions/interfaces/ITransactionReceipt.js +2 -0
  151. package/cjs/utils/BitcoinUtils.d.ts +4 -0
  152. package/cjs/utils/BitcoinUtils.js +14 -0
  153. package/docs/assets/navigation.js +1 -1
  154. package/docs/assets/search.js +1 -1
  155. package/docs/classes/AbstractRpcProvider.html +15 -15
  156. package/docs/classes/BaseContract.html +187 -0
  157. package/docs/classes/BitcoinAddress.html +5 -2
  158. package/docs/classes/BitcoinInterface.html +182 -0
  159. package/docs/classes/BitcoinUtils.html +183 -0
  160. package/docs/classes/Block.html +5 -3
  161. package/docs/classes/CallResult.html +6 -2
  162. package/docs/classes/ContractData.html +4 -2
  163. package/docs/classes/DeploymentTransaction.html +4 -2
  164. package/docs/classes/GenericTransaction.html +4 -2
  165. package/docs/classes/IBaseContract.html +192 -0
  166. package/docs/classes/InteractionTransaction.html +3 -2
  167. package/docs/classes/JSONRpcProvider.html +14 -14
  168. package/docs/classes/StoredValue.html +4 -2
  169. package/docs/classes/TransactionBase.html +4 -2
  170. package/docs/classes/TransactionInput.html +3 -2
  171. package/docs/classes/TransactionOutput.html +3 -2
  172. package/docs/classes/TransactionParser.html +3 -2
  173. package/docs/classes/TransactionReceipt.html +3 -2
  174. package/docs/classes/UTXO.html +4 -2
  175. package/docs/classes/WebSocketRpcProvider.html +14 -14
  176. package/docs/enums/ABIDataTypes.html +183 -0
  177. package/docs/enums/BitcoinAbiTypes.html +178 -0
  178. package/docs/enums/OPNetTransactionTypes.html +2 -2
  179. package/docs/functions/getContract.html +180 -0
  180. package/docs/hierarchy.html +1 -1
  181. package/docs/index.html +4 -5
  182. package/docs/interfaces/BaseContractProperties.html +176 -0
  183. package/docs/interfaces/BitcoinAbiValue.html +180 -0
  184. package/docs/interfaces/BitcoinInterfaceAbiBase.html +182 -0
  185. package/docs/interfaces/IAccessList.html +3 -1
  186. package/docs/interfaces/IAccessListItem.html +3 -1
  187. package/docs/interfaces/IBlock.html +5 -3
  188. package/docs/interfaces/IBlockCommon.html +5 -3
  189. package/docs/interfaces/ICallRequestError.html +4 -2
  190. package/docs/interfaces/ICallResultData.html +4 -2
  191. package/docs/interfaces/IContract.html +177 -0
  192. package/docs/interfaces/IDeploymentTransaction.html +4 -2
  193. package/docs/interfaces/IGenericTransaction.html +4 -2
  194. package/docs/interfaces/IInteractionTransaction.html +4 -2
  195. package/docs/interfaces/IRawContract.html +5 -2
  196. package/docs/interfaces/IStorageValue.html +4 -2
  197. package/docs/interfaces/ITransactionBase.html +4 -2
  198. package/docs/interfaces/ITransactionInput.html +3 -2
  199. package/docs/interfaces/ITransactionOutput.html +3 -2
  200. package/docs/interfaces/ITransactionReceipt.html +4 -2
  201. package/docs/interfaces/IUTXO.html +4 -2
  202. package/docs/modules.html +38 -24
  203. package/docs/types/BaseContractProperty.html +176 -0
  204. package/docs/types/BitcoinAddressLike.html +1 -1
  205. package/docs/types/BitcoinInterfaceAbi.html +174 -0
  206. package/docs/types/BlockHeaderChecksumProof.html +1 -1
  207. package/docs/types/DecodedCallResult.html +174 -0
  208. package/docs/types/ICallResult.html +2 -1
  209. package/docs/types/ITransaction.html +2 -1
  210. package/docs/types/PointerLike.html +1 -1
  211. package/docs/types/UTXOs.html +3 -1
  212. package/docs/variables/version.html +1 -1
  213. package/package.json +6 -4
  214. package/src/_version.ts +1 -1
  215. package/src/abi/BaseContractProperty.ts +8 -0
  216. package/src/abi/BitcoinAbiTypes.ts +9 -0
  217. package/src/abi/BitcoinInterface.ts +63 -0
  218. package/src/abi/interfaces/BaseContractProperties.ts +9 -0
  219. package/src/abi/interfaces/BitcoinAbiValue.ts +18 -0
  220. package/src/abi/interfaces/BitcoinInterfaceAbi.ts +19 -0
  221. package/src/bitcoin/BitcoinAddress.ts +5 -0
  222. package/src/bitcoin/UTXOs.ts +28 -26
  223. package/src/bitcoin/interfaces/IUTXO.ts +12 -0
  224. package/src/block/Block.ts +5 -0
  225. package/src/block/interfaces/IBlock.ts +46 -38
  226. package/src/common/CommonTypes.ts +16 -4
  227. package/src/contracts/CallResult.ts +34 -20
  228. package/src/contracts/Contract.ts +321 -0
  229. package/src/contracts/ContractData.ts +46 -41
  230. package/src/contracts/interfaces/IAccessList.ts +17 -7
  231. package/src/contracts/interfaces/ICallResult.ts +29 -15
  232. package/src/contracts/interfaces/IContract.ts +10 -0
  233. package/src/contracts/interfaces/IRawContract.ts +17 -12
  234. package/src/crypto/crypto-browser.js +71 -60
  235. package/src/opnet.ts +17 -0
  236. package/src/providers/AbstractRpcProvider.ts +352 -351
  237. package/src/scripts/testContract.ts +51 -0
  238. package/src/scripts/{test.ts → testMethods.ts} +52 -54
  239. package/src/scripts/test_abi.json +31 -0
  240. package/src/storage/StoredValue.ts +35 -30
  241. package/src/storage/interfaces/IStorageValue.ts +15 -10
  242. package/src/transactions/DeploymentTransaction.ts +41 -36
  243. package/src/transactions/GenericTransaction.ts +19 -12
  244. package/src/transactions/InteractionTransaction.ts +44 -40
  245. package/src/transactions/Transaction.ts +8 -0
  246. package/src/transactions/TransactionInput.ts +8 -0
  247. package/src/transactions/TransactionOutput.ts +8 -0
  248. package/src/transactions/TransactionParser.ts +47 -43
  249. package/src/transactions/TransactionReceipt.ts +22 -18
  250. package/src/transactions/interfaces/ITransaction.ts +78 -52
  251. package/src/transactions/interfaces/ITransactionReceipt.ts +14 -9
  252. package/src/utils/BitcoinUtils.ts +22 -0
  253. package/webpack.config.js +71 -75
@@ -13,8 +13,17 @@ export * from './block/Block.js';
13
13
  export * from './transactions/TransactionParser.js';
14
14
  export * from './contracts/ContractData.js';
15
15
  export * from './contracts/CallResult.js';
16
+ export * from './contracts/Contract.js';
17
+ export * from './contracts/interfaces/IContract.js';
16
18
  export * from './contracts/interfaces/ICallResult.js';
17
19
  export * from './contracts/interfaces/IAccessList.js';
20
+ export * from './abi/BitcoinInterface.js';
21
+ export * from './abi/interfaces/BitcoinInterfaceAbi.js';
22
+ export * from './abi/interfaces/BitcoinAbiValue.js';
23
+ export * from './abi/BitcoinAbiTypes.js';
24
+ export * from './abi/interfaces/BaseContractProperties.js';
25
+ export * from './abi/BaseContractProperty.js';
26
+ export * from './utils/BitcoinUtils.js';
18
27
  export * from './storage/StoredValue.js';
19
28
  export * from './storage/interfaces/IStorageValue.js';
20
29
  export * from './block/interfaces/IBlock.js';
@@ -25,3 +34,5 @@ export * from './contracts/interfaces/IRawContract.js';
25
34
  export * from './common/CommonTypes.js';
26
35
  export * from './bitcoin/BitcoinAddress.js';
27
36
  export * from './bitcoin/UTXOs.js';
37
+ export * from './bitcoin/interfaces/IUTXO.js';
38
+ export { ABIDataTypes } from '@btc-vision/bsi-binary';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { BigNumberish } from 'ethers';
2
+ export declare class BitcoinUtils {
3
+ static formatUnits(value: BigNumberish, decimals?: number): string;
4
+ }
@@ -1 +1 @@
1
- export declare const version = "1.0.12";
1
+ export declare const version = "1.0.15";
package/build/_version.js CHANGED
@@ -1 +1 @@
1
- export const version = '1.0.12';
1
+ export const version = '1.0.15';
@@ -0,0 +1,3 @@
1
+ import { CallResult } from '../contracts/CallResult.js';
2
+ import { ICallRequestError } from '../contracts/interfaces/ICallResult.js';
3
+ export type BaseContractProperty = CallResult | ICallRequestError;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export declare enum BitcoinAbiTypes {
2
+ Function = "function",
3
+ Event = "event"
4
+ }
@@ -0,0 +1,5 @@
1
+ export var BitcoinAbiTypes;
2
+ (function (BitcoinAbiTypes) {
3
+ BitcoinAbiTypes["Function"] = "function";
4
+ BitcoinAbiTypes["Event"] = "event";
5
+ })(BitcoinAbiTypes || (BitcoinAbiTypes = {}));
@@ -0,0 +1,9 @@
1
+ import { BitcoinInterfaceAbi } from './interfaces/BitcoinInterfaceAbi.js';
2
+ export declare class BitcoinInterface {
3
+ readonly abi: BitcoinInterfaceAbi;
4
+ constructor(abi: BitcoinInterfaceAbi);
5
+ static from(abi: BitcoinInterface | BitcoinInterfaceAbi): BitcoinInterface;
6
+ hasFunction(name: string): boolean;
7
+ private verifyAbi;
8
+ private verifyAbiValues;
9
+ }
@@ -0,0 +1,45 @@
1
+ export class BitcoinInterface {
2
+ abi;
3
+ constructor(abi) {
4
+ this.verifyAbi(abi);
5
+ this.abi = abi;
6
+ }
7
+ static from(abi) {
8
+ if (abi instanceof BitcoinInterface) {
9
+ return abi;
10
+ }
11
+ return new BitcoinInterface(abi);
12
+ }
13
+ hasFunction(name) {
14
+ return this.abi.some((element) => element.name === name && element.type === 'function');
15
+ }
16
+ verifyAbi(abi) {
17
+ if (abi.length === 0) {
18
+ throw new Error('The ABI provided is empty.');
19
+ }
20
+ for (let i = 0; i < abi.length; i++) {
21
+ const element = abi[i];
22
+ if (!element.name) {
23
+ throw new Error('The ABI provided is missing a name.');
24
+ }
25
+ if (!element.type) {
26
+ throw new Error('The ABI provided is missing a type.');
27
+ }
28
+ if (element.inputs && element.inputs.length)
29
+ this.verifyAbiValues(element.inputs);
30
+ if (element.outputs && element.outputs.length)
31
+ this.verifyAbiValues(element.outputs);
32
+ }
33
+ }
34
+ verifyAbiValues(inputs) {
35
+ for (let j = 0; j < inputs.length; j++) {
36
+ const input = inputs[j];
37
+ if (!input.name) {
38
+ throw new Error('The ABI provided is missing an input name.');
39
+ }
40
+ if (!input.type) {
41
+ throw new Error('The ABI provided is missing an input type.');
42
+ }
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,3 @@
1
+ export interface BitcoinInterfaceAbiBase {
2
+ }
3
+ export type BitcoinInterfaceAbi = BitcoinInterfaceAbiBase[];
@@ -0,0 +1 @@
1
+ export {};
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,6 @@
1
+ import { BitcoinInterfaceAbi } from './BitcoinInterfaceAbi.js';
2
+ export declare class BitcoinInterface {
3
+ readonly abi: BitcoinInterfaceAbi;
4
+ constructor(abi: BitcoinInterfaceAbi);
5
+ static from(abi: BitcoinInterface | BitcoinInterfaceAbi): BitcoinInterface;
6
+ }
@@ -0,0 +1,12 @@
1
+ export class BitcoinInterface {
2
+ abi;
3
+ constructor(abi) {
4
+ this.abi = abi;
5
+ }
6
+ static from(abi) {
7
+ if (abi instanceof BitcoinInterface) {
8
+ return abi;
9
+ }
10
+ return new BitcoinInterface(abi);
11
+ }
12
+ }
@@ -0,0 +1,3 @@
1
+ export interface BitcoinInterfaceAbiBase {
2
+ }
3
+ export type BitcoinInterfaceAbi = BitcoinInterfaceAbiBase[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { BaseContractProperty } from '../BaseContractProperty.js';
2
+ export interface BaseContractProperties {
3
+ [key: symbol]: BaseContractProperty;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export interface BaseContractProperty {
2
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { ABIDataTypes } from '@btc-vision/bsi-binary';
2
+ export interface BitcoinAbiInput {
3
+ name: string;
4
+ type: ABIDataTypes;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { ABIDataTypes } from '@btc-vision/bsi-binary';
2
+ export interface BitcoinAbiValue {
3
+ name: string;
4
+ type: ABIDataTypes;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { BitcoinAbiTypes } from '../BitcoinAbiTypes.js';
2
+ import { BitcoinAbiValue } from './BitcoinAbiValue.js';
3
+ export interface BitcoinInterfaceAbiBase {
4
+ readonly constant?: boolean;
5
+ readonly name: string;
6
+ readonly inputs?: BitcoinAbiValue[];
7
+ readonly outputs?: BitcoinAbiValue[];
8
+ readonly type: BitcoinAbiTypes;
9
+ readonly payable?: boolean;
10
+ }
11
+ export type BitcoinInterfaceAbi = BitcoinInterfaceAbiBase[];
@@ -0,0 +1 @@
1
+ export {};
@@ -1,10 +1,5 @@
1
1
  import { ScriptPubKey } from '@btc-vision/bsi-bitcoin-rpc';
2
- export interface IUTXO {
3
- readonly transactionId: string;
4
- readonly outputIndex: number;
5
- readonly value: bigint | string;
6
- readonly scriptPubKey: ScriptPubKey;
7
- }
2
+ import { IUTXO } from './interfaces/IUTXO.js';
8
3
  export declare class UTXO implements IUTXO {
9
4
  readonly transactionId: string;
10
5
  readonly outputIndex: number;
@@ -0,0 +1,7 @@
1
+ import { ScriptPubKey } from '@btc-vision/bsi-bitcoin-rpc';
2
+ export interface IUTXO {
3
+ readonly transactionId: string;
4
+ readonly outputIndex: number;
5
+ readonly value: bigint | string;
6
+ readonly scriptPubKey: ScriptPubKey;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
1
  import { BitcoinAddress } from '../bitcoin/BitcoinAddress.js';
2
2
  export type BitcoinAddressLike = string | BitcoinAddress;
3
3
  export type PointerLike = bigint | string;
4
+ export type DecodedCallResult = bigint | string | boolean | number | Uint8Array | Array<bigint> | Array<string> | Array<boolean> | Array<number> | Array<Uint8Array>;
@@ -1,10 +1,13 @@
1
- import { NetEvent } from '@btc-vision/bsi-binary';
2
- import { BufferReader } from 'bitcoinjs-lib/src/bufferutils.js';
1
+ import { BinaryReader, NetEvent } from '@btc-vision/bsi-binary';
2
+ import { DecodedCallResult } from '../common/CommonTypes.js';
3
3
  import { IAccessList } from './interfaces/IAccessList.js';
4
4
  import { ICallResultData } from './interfaces/ICallResult.js';
5
5
  export declare class CallResult implements ICallResultData {
6
- readonly result: BufferReader;
6
+ readonly result: BinaryReader;
7
7
  readonly events: NetEvent[];
8
8
  readonly accessList: IAccessList;
9
+ readonly decoded: Array<DecodedCallResult>;
9
10
  constructor(iCallResult: ICallResultData);
11
+ setDecoded(decoded: Array<DecodedCallResult>): void;
12
+ private base64ToUint8Array;
10
13
  }
@@ -1,14 +1,21 @@
1
- import { BufferReader } from 'bitcoinjs-lib/src/bufferutils.js';
1
+ import { BinaryReader, BufferHelper } from '@btc-vision/bsi-binary';
2
2
  export class CallResult {
3
3
  result;
4
4
  events;
5
5
  accessList;
6
+ decoded = [];
6
7
  constructor(iCallResult) {
7
8
  this.events = iCallResult.events;
8
9
  this.accessList = iCallResult.accessList;
9
10
  this.result =
10
11
  typeof iCallResult.result === 'string'
11
- ? new BufferReader(Buffer.from(iCallResult.result, 'hex'))
12
+ ? new BinaryReader(this.base64ToUint8Array(iCallResult.result))
12
13
  : iCallResult.result;
13
14
  }
15
+ setDecoded(decoded) {
16
+ this.decoded.push(...decoded);
17
+ }
18
+ base64ToUint8Array(base64) {
19
+ return BufferHelper.bufferToUint8Array(Buffer.from(base64, 'base64'));
20
+ }
14
21
  }
@@ -0,0 +1,28 @@
1
+ import { BaseContractProperty } from '../abi/BaseContractProperty.js';
2
+ import { BitcoinInterface } from '../abi/BitcoinInterface.js';
3
+ import { BaseContractProperties } from '../abi/interfaces/BaseContractProperties.js';
4
+ import { BitcoinInterfaceAbi } from '../abi/interfaces/BitcoinInterfaceAbi.js';
5
+ import { BitcoinAddressLike } from '../common/CommonTypes.js';
6
+ import { AbstractRpcProvider } from '../providers/AbstractRpcProvider.js';
7
+ import { IContract } from './interfaces/IContract.js';
8
+ declare const internal: unique symbol;
9
+ export declare abstract class IBaseContract<T extends BaseContractProperties> implements IContract {
10
+ readonly address: BitcoinAddressLike;
11
+ readonly interface: BitcoinInterface;
12
+ readonly provider: AbstractRpcProvider;
13
+ readonly [internal]: keyof T | undefined;
14
+ private events;
15
+ protected constructor(address: BitcoinAddressLike, abi: BitcoinInterface | BitcoinInterfaceAbi, provider: AbstractRpcProvider);
16
+ protected getFunction(name: symbol): BaseContractProperty | undefined | string | number | symbol;
17
+ private defineInternalFunctions;
18
+ private encodeFunctionData;
19
+ private encodeInput;
20
+ private decodeOutput;
21
+ private callFunction;
22
+ }
23
+ export declare class BaseContract<T extends BaseContractProperties> extends IBaseContract<T> {
24
+ constructor(address: BitcoinAddressLike, abi: BitcoinInterface | BitcoinInterfaceAbi, provider: AbstractRpcProvider);
25
+ private proxify;
26
+ }
27
+ export declare function getContract<T extends BaseContractProperties>(address: BitcoinAddressLike, abi: BitcoinInterface | BitcoinInterfaceAbi, provider: AbstractRpcProvider): BaseContract<T> & Omit<T, keyof BaseContract<T>>;
28
+ export {};
@@ -0,0 +1,206 @@
1
+ import { ABICoder, ABIDataTypes, BinaryWriter } from '@btc-vision/bsi-binary';
2
+ import { BitcoinAbiTypes } from '../abi/BitcoinAbiTypes.js';
3
+ import { BitcoinInterface } from '../abi/BitcoinInterface.js';
4
+ const internal = Symbol.for('_btc_internal');
5
+ const bitcoinAbiCoder = new ABICoder();
6
+ export class IBaseContract {
7
+ address;
8
+ interface;
9
+ provider;
10
+ [internal];
11
+ events = [];
12
+ constructor(address, abi, provider) {
13
+ this.address = address;
14
+ this.provider = provider;
15
+ this.interface = BitcoinInterface.from(abi);
16
+ Object.defineProperty(this, internal, { value: {} });
17
+ this.defineInternalFunctions();
18
+ }
19
+ getFunction(name) {
20
+ const key = name;
21
+ return this[key];
22
+ }
23
+ defineInternalFunctions() {
24
+ for (const element of this.interface.abi) {
25
+ switch (element.type) {
26
+ case BitcoinAbiTypes.Function:
27
+ Object.defineProperty(this, element.name, {
28
+ value: this.callFunction(element).bind(this),
29
+ });
30
+ break;
31
+ case BitcoinAbiTypes.Event:
32
+ this.events.push(element);
33
+ break;
34
+ default:
35
+ break;
36
+ }
37
+ }
38
+ }
39
+ encodeFunctionData(element, args) {
40
+ const writer = new BinaryWriter();
41
+ const selector = Number('0x' + bitcoinAbiCoder.encodeSelector(element.name));
42
+ writer.writeSelector(selector);
43
+ if (args.length !== element.inputs.length) {
44
+ throw new Error('Invalid number of arguments provided');
45
+ }
46
+ if (!element.inputs || (element.inputs && element.inputs.length === 0)) {
47
+ return writer;
48
+ }
49
+ for (let i = 0; i < element.inputs.length; i++) {
50
+ this.encodeInput(writer, element.inputs[i], args[i]);
51
+ }
52
+ return writer;
53
+ }
54
+ encodeInput(writer, abi, value) {
55
+ const type = abi.type;
56
+ const name = abi.name;
57
+ switch (type) {
58
+ case ABIDataTypes.UINT256:
59
+ if (typeof value !== 'bigint') {
60
+ throw new Error(`Expected value to be of type bigint (${name})`);
61
+ }
62
+ writer.writeU256(value);
63
+ break;
64
+ case ABIDataTypes.BOOL:
65
+ if (typeof value !== 'boolean') {
66
+ throw new Error(`Expected value to be of type boolean (${name})`);
67
+ }
68
+ writer.writeBoolean(value);
69
+ break;
70
+ case ABIDataTypes.STRING:
71
+ if (typeof value !== 'string') {
72
+ throw new Error(`Expected value to be of type string (${name})`);
73
+ }
74
+ writer.writeStringWithLength(value);
75
+ break;
76
+ case ABIDataTypes.ADDRESS:
77
+ const address = value;
78
+ writer.writeAddress(address.toString());
79
+ break;
80
+ case ABIDataTypes.TUPLE:
81
+ if (!(value instanceof Array)) {
82
+ throw new Error(`Expected value to be of type Array (${name})`);
83
+ }
84
+ writer.writeTuple(value);
85
+ break;
86
+ case ABIDataTypes.UINT8:
87
+ if (typeof value !== 'number') {
88
+ throw new Error(`Expected value to be of type number (${name})`);
89
+ }
90
+ writer.writeU8(value);
91
+ break;
92
+ case ABIDataTypes.UINT16:
93
+ if (typeof value !== 'number') {
94
+ throw new Error(`Expected value to be of type number (${name})`);
95
+ }
96
+ writer.writeU16(value);
97
+ break;
98
+ case ABIDataTypes.UINT32:
99
+ if (typeof value !== 'number') {
100
+ throw new Error(`Expected value to be of type number (${name})`);
101
+ }
102
+ writer.writeU32(value);
103
+ break;
104
+ case ABIDataTypes.BYTES32:
105
+ if (!(value instanceof Uint8Array)) {
106
+ throw new Error(`Expected value to be of type Uint8Array (${name})`);
107
+ }
108
+ writer.writeBytes(value);
109
+ break;
110
+ default:
111
+ throw new Error(`Unsupported type: ${type} (${name})`);
112
+ }
113
+ }
114
+ decodeOutput(abi, reader) {
115
+ const result = [];
116
+ for (let i = 0; i < abi.length; i++) {
117
+ const type = abi[i].type;
118
+ const name = abi[i].name;
119
+ switch (type) {
120
+ case ABIDataTypes.UINT256:
121
+ result.push(reader.readU256());
122
+ break;
123
+ case ABIDataTypes.BOOL:
124
+ result.push(reader.readBoolean());
125
+ break;
126
+ case ABIDataTypes.STRING:
127
+ result.push(reader.readStringWithLength());
128
+ break;
129
+ case ABIDataTypes.ADDRESS:
130
+ result.push(reader.readAddress());
131
+ break;
132
+ case ABIDataTypes.TUPLE:
133
+ result.push(reader.readTuple());
134
+ break;
135
+ case ABIDataTypes.UINT8:
136
+ result.push(reader.readU8());
137
+ break;
138
+ case ABIDataTypes.UINT16:
139
+ result.push(reader.readU16());
140
+ break;
141
+ case ABIDataTypes.UINT32:
142
+ result.push(reader.readU32());
143
+ break;
144
+ case ABIDataTypes.BYTES32:
145
+ result.push(reader.readBytes(32));
146
+ break;
147
+ default:
148
+ throw new Error(`Unsupported type: ${type} (${name})`);
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ callFunction(element) {
154
+ return async (...args) => {
155
+ const data = this.encodeFunctionData(element, args);
156
+ const response = await this.provider.call(this.address, Buffer.from(data.getBuffer()));
157
+ if ('error' in response) {
158
+ return response;
159
+ }
160
+ const decoded = element.outputs
161
+ ? this.decodeOutput(element.outputs, response.result)
162
+ : [];
163
+ response.setDecoded(decoded);
164
+ return response;
165
+ };
166
+ }
167
+ }
168
+ export class BaseContract extends IBaseContract {
169
+ constructor(address, abi, provider) {
170
+ super(address, abi, provider);
171
+ return this.proxify();
172
+ }
173
+ proxify() {
174
+ return new Proxy(this, {
175
+ get: (target, prop, receiver) => {
176
+ if (typeof prop === 'symbol' || prop in target) {
177
+ return Reflect.get(target, prop, receiver);
178
+ }
179
+ try {
180
+ return this.getFunction(prop);
181
+ }
182
+ catch (error) {
183
+ if (!(error instanceof Error)) {
184
+ throw new Error(`Something went wrong when trying to get the function: ${error}`);
185
+ }
186
+ else {
187
+ throw error;
188
+ }
189
+ }
190
+ },
191
+ has: (target, prop) => {
192
+ if (typeof prop === 'symbol' || prop in target) {
193
+ return Reflect.has(target, prop);
194
+ }
195
+ return target.interface.hasFunction(prop);
196
+ },
197
+ });
198
+ }
199
+ }
200
+ function contractBase() {
201
+ return BaseContract;
202
+ }
203
+ export function getContract(address, abi, provider) {
204
+ const base = contractBase();
205
+ return new base(address, abi, provider);
206
+ }
@@ -1,11 +1,10 @@
1
- import { NetEvent } from '@btc-vision/bsi-binary';
2
- import { BufferReader } from 'bitcoinjs-lib/src/bufferutils.js';
1
+ import { BinaryReader, NetEvent } from '@btc-vision/bsi-binary';
3
2
  import { IAccessList } from './IAccessList.js';
4
3
  export interface ICallRequestError {
5
4
  readonly error: string;
6
5
  }
7
6
  export interface ICallResultData {
8
- readonly result: string | BufferReader;
7
+ readonly result: string | BinaryReader;
9
8
  readonly events: NetEvent[];
10
9
  readonly accessList: IAccessList;
11
10
  }
@@ -0,0 +1,4 @@
1
+ import { BitcoinAddressLike } from '../../common/CommonTypes.js';
2
+ export interface IContract {
3
+ readonly address: BitcoinAddressLike;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { BitcoinInterfaceAbi } from './BitcoinInterfaceAbi.js';
2
+ export declare class BitcoinInterface {
3
+ readonly abi: BitcoinInterfaceAbi;
4
+ constructor(abi: BitcoinInterfaceAbi);
5
+ static from(abi: BitcoinInterface | BitcoinInterfaceAbi): BitcoinInterface;
6
+ }
@@ -0,0 +1,12 @@
1
+ export class BitcoinInterface {
2
+ abi;
3
+ constructor(abi) {
4
+ this.abi = abi;
5
+ }
6
+ static from(abi) {
7
+ if (abi instanceof BitcoinInterface) {
8
+ return abi;
9
+ }
10
+ return new BitcoinInterface(abi);
11
+ }
12
+ }
@@ -0,0 +1,3 @@
1
+ export interface BitcoinInterfaceAbiBase {
2
+ }
3
+ export type BitcoinInterfaceAbi = BitcoinInterfaceAbiBase[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare class Interface {
2
+ }
@@ -0,0 +1,2 @@
1
+ export class Interface {
2
+ }
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
package/build/opnet.d.ts CHANGED
@@ -13,8 +13,17 @@ export * from './block/Block.js';
13
13
  export * from './transactions/TransactionParser.js';
14
14
  export * from './contracts/ContractData.js';
15
15
  export * from './contracts/CallResult.js';
16
+ export * from './contracts/Contract.js';
17
+ export * from './contracts/interfaces/IContract.js';
16
18
  export * from './contracts/interfaces/ICallResult.js';
17
19
  export * from './contracts/interfaces/IAccessList.js';
20
+ export * from './abi/BitcoinInterface.js';
21
+ export * from './abi/interfaces/BitcoinInterfaceAbi.js';
22
+ export * from './abi/interfaces/BitcoinAbiValue.js';
23
+ export * from './abi/BitcoinAbiTypes.js';
24
+ export * from './abi/interfaces/BaseContractProperties.js';
25
+ export * from './abi/BaseContractProperty.js';
26
+ export * from './utils/BitcoinUtils.js';
18
27
  export * from './storage/StoredValue.js';
19
28
  export * from './storage/interfaces/IStorageValue.js';
20
29
  export * from './block/interfaces/IBlock.js';
@@ -25,3 +34,5 @@ export * from './contracts/interfaces/IRawContract.js';
25
34
  export * from './common/CommonTypes.js';
26
35
  export * from './bitcoin/BitcoinAddress.js';
27
36
  export * from './bitcoin/UTXOs.js';
37
+ export * from './bitcoin/interfaces/IUTXO.js';
38
+ export { ABIDataTypes } from '@btc-vision/bsi-binary';
package/build/opnet.js CHANGED
@@ -13,8 +13,17 @@ export * from './block/Block.js';
13
13
  export * from './transactions/TransactionParser.js';
14
14
  export * from './contracts/ContractData.js';
15
15
  export * from './contracts/CallResult.js';
16
+ export * from './contracts/Contract.js';
17
+ export * from './contracts/interfaces/IContract.js';
16
18
  export * from './contracts/interfaces/ICallResult.js';
17
19
  export * from './contracts/interfaces/IAccessList.js';
20
+ export * from './abi/BitcoinInterface.js';
21
+ export * from './abi/interfaces/BitcoinInterfaceAbi.js';
22
+ export * from './abi/interfaces/BitcoinAbiValue.js';
23
+ export * from './abi/BitcoinAbiTypes.js';
24
+ export * from './abi/interfaces/BaseContractProperties.js';
25
+ export * from './abi/BaseContractProperty.js';
26
+ export * from './utils/BitcoinUtils.js';
18
27
  export * from './storage/StoredValue.js';
19
28
  export * from './storage/interfaces/IStorageValue.js';
20
29
  export * from './block/interfaces/IBlock.js';
@@ -25,3 +34,5 @@ export * from './contracts/interfaces/IRawContract.js';
25
34
  export * from './common/CommonTypes.js';
26
35
  export * from './bitcoin/BitcoinAddress.js';
27
36
  export * from './bitcoin/UTXOs.js';
37
+ export * from './bitcoin/interfaces/IUTXO.js';
38
+ export { ABIDataTypes } from '@btc-vision/bsi-binary';