koilib 8.1.0 → 9.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.
package/src/Provider.ts CHANGED
@@ -93,7 +93,7 @@ export interface ProviderInterface {
93
93
  nameOrId: string | number,
94
94
  args: Record<string, unknown>,
95
95
  callerData?: { caller: string; caller_privilege: number }
96
- ) => Promise<T>;
96
+ ) => Promise<T | undefined>;
97
97
 
98
98
  // optional functions
99
99
  submitBlock?: (block: BlockJson) => Promise<Record<string, never>>;
@@ -111,18 +111,24 @@ export interface ProviderInterface {
111
111
  compute_bandwidth_cost: string;
112
112
  };
113
113
  }>;
114
- invokeGetContractMetadata?: (contractId: string) => Promise<{
115
- value: {
116
- hash: string;
117
- system: boolean;
118
- authorizes_call_contract: boolean;
119
- authorizes_transaction_application: boolean;
120
- authorizes_upload_contract: boolean;
121
- };
122
- }>;
123
- invokeGetContractAddress?: (name: string) => Promise<{
124
- value: { address: string };
125
- }>;
114
+ invokeGetContractMetadata?: (contractId: string) => Promise<
115
+ | {
116
+ value: {
117
+ hash: string;
118
+ system: boolean;
119
+ authorizes_call_contract: boolean;
120
+ authorizes_transaction_application: boolean;
121
+ authorizes_upload_contract: boolean;
122
+ };
123
+ }
124
+ | undefined
125
+ >;
126
+ invokeGetContractAddress?: (name: string) => Promise<
127
+ | {
128
+ value: { address: string };
129
+ }
130
+ | undefined
131
+ >;
126
132
  }
127
133
 
128
134
  /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */
@@ -693,25 +699,49 @@ export class Provider implements ProviderInterface {
693
699
  */
694
700
  async wait(
695
701
  txId: string,
696
- type: "byTransactionId" | "byBlock" = "byBlock",
702
+ type: "byTransactionId" | "byBlock" = "byTransactionId",
697
703
  timeout = 15000
698
704
  ): Promise<{
699
705
  blockId: string;
700
706
  blockNumber?: number;
701
707
  }> {
702
- const iniTime = Date.now();
708
+ const endTime = Date.now() + timeout;
703
709
  if (type === "byTransactionId") {
704
- while (Date.now() < iniTime + timeout) {
710
+ while (Date.now() < endTime) {
705
711
  await sleep(1000);
706
712
  const { transactions } = await this.getTransactionsById([txId]);
713
+ // If the API node knows about the transaction and
714
+ // the transaction has been included in a block
707
715
  if (
708
716
  transactions &&
709
717
  transactions[0] &&
710
718
  transactions[0].containing_blocks
711
- )
712
- return {
713
- blockId: transactions[0].containing_blocks[0],
714
- };
719
+ ) {
720
+ // For each of the blocks containing the transaction,
721
+ // check to see if that block is a parent of head
722
+
723
+ // Get the height of the containing block
724
+ const blockCandidates = transactions[0].containing_blocks;
725
+ const blocks = await this.getBlocksById(blockCandidates, {
726
+ returnBlock: false,
727
+ returnReceipt: false,
728
+ });
729
+
730
+ if (blocks && blocks.block_items && blocks.block_items.length > 0) {
731
+ for (let i = 0; i < blocks.block_items.length; i += 1) {
732
+ // If the ancestor block of head at the height of the containing
733
+ // block is the containing block, return that block
734
+ const blockNumber = Number(blocks.block_items[i].block_height);
735
+ const blocksHeight = await this.getBlocks(blockNumber);
736
+ if (blocksHeight) {
737
+ const blockId = blockCandidates.find(
738
+ (b) => b === blocksHeight[0].block_id
739
+ );
740
+ if (blockId) return { blockId, blockNumber };
741
+ }
742
+ }
743
+ }
744
+ }
715
745
  }
716
746
  throw new Error(`Transaction not mined after ${timeout} ms`);
717
747
  }
@@ -747,7 +777,7 @@ export class Provider implements ProviderInterface {
747
777
  let iniBlock = 0;
748
778
  let previousId = "";
749
779
 
750
- while (Date.now() < iniTime + timeout) {
780
+ while (Date.now() < endTime) {
751
781
  await sleep(1000);
752
782
  const { head_topology: headTopology } = await this.getHeadInfo();
753
783
  if (blockNumber === 0) {
@@ -912,7 +942,7 @@ export class Provider implements ProviderInterface {
912
942
  nameOrId: string | number,
913
943
  args: Record<string, unknown>,
914
944
  callerData?: { caller: string; caller_privilege: number }
915
- ): Promise<T> {
945
+ ): Promise<T | undefined> {
916
946
  if (!serializer.argumentsTypeName)
917
947
  throw new Error("argumentsTypeName not defined");
918
948
  if (!serializer.returnTypeName)
@@ -930,8 +960,7 @@ export class Provider implements ProviderInterface {
930
960
  caller_data: callerData,
931
961
  }
932
962
  );
933
- if (!response || !response.value)
934
- throw new Error("no value in the response");
963
+ if (!response || !response.value) return undefined;
935
964
  const result = await serializer.deserialize(
936
965
  response.value,
937
966
  serializer.returnTypeName
@@ -1036,7 +1065,7 @@ export class Provider implements ProviderInterface {
1036
1065
  * @param name - contract name
1037
1066
  *
1038
1067
  * @example
1039
- * * ```ts
1068
+ * ```ts
1040
1069
  * const provider = new Provider("https://api.koinos.io");
1041
1070
  * const result = await provider.invokeGetContractAddress("koin");
1042
1071
  * console.log(result);
package/src/interface.ts CHANGED
@@ -50,13 +50,13 @@ import { Serializer } from "./Serializer";
50
50
  * },
51
51
  * mint: {
52
52
  * entry_point: 0xc2f82bdc,
53
- * argument: "mint_argumnets",
53
+ * argument: "mint_arguments",
54
54
  * return: "mint_result",
55
55
  * },
56
56
  * },
57
57
  * events: {
58
58
  * 'koinos.contracts.token.mint_event': {
59
- * argument: "mint"
59
+ * type: "mint_arguments"
60
60
  * },
61
61
  * },
62
62
  * koilib_types: tokenJson,
@@ -151,7 +151,7 @@ import { Serializer } from "./Serializer";
151
151
  * },
152
152
  * events: {
153
153
  * 'transfer_event': {
154
- * argument: "transfer"
154
+ * type: "transfer"
155
155
  * },
156
156
  * },
157
157
  * koilib_types: tokenJson,
@@ -200,8 +200,10 @@ export interface Abi {
200
200
  */
201
201
  events?: {
202
202
  [x: string]: {
203
- /** Protobuffer type for argument */
203
+ /** Deprecated, use type instead */
204
204
  argument?: string;
205
+ /** Protobuffer type for event */
206
+ type?: string;
205
207
  /** Description of the event */
206
208
  description?: string;
207
209
  };
package/src/utils.ts CHANGED
@@ -578,6 +578,13 @@ export const tokenAbi: Abi = {
578
578
  read_only: false,
579
579
  entry_point: 0xdc6f17bb,
580
580
  },
581
+ burn: {
582
+ argument: "token.burn_args",
583
+ return: "",
584
+ description: "Burn tokens",
585
+ read_only: false,
586
+ entry_point: 0x859facc5,
587
+ },
581
588
  },
582
589
  types:
583
590
  "CpoICiJrb2lub3MvY29udHJhY3RzL3Rva2VuL3Rva2VuLnByb3RvEhZrb2lub3MuY29udHJhY3RzLnRva2VuGhRrb2lub3Mvb3B0aW9ucy5wcm90byIQCg5uYW1lX2FyZ3VtZW50cyIjCgtuYW1lX3Jlc3VsdBIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUiEgoQc3ltYm9sX2FyZ3VtZW50cyIlCg1zeW1ib2xfcmVzdWx0EhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIUChJkZWNpbWFsc19hcmd1bWVudHMiJwoPZGVjaW1hbHNfcmVzdWx0EhQKBXZhbHVlGAEgASgNUgV2YWx1ZSIYChZ0b3RhbF9zdXBwbHlfYXJndW1lbnRzIi8KE3RvdGFsX3N1cHBseV9yZXN1bHQSGAoFdmFsdWUYASABKARCAjABUgV2YWx1ZSIyChRiYWxhbmNlX29mX2FyZ3VtZW50cxIaCgVvd25lchgBIAEoDEIEgLUYBlIFb3duZXIiLQoRYmFsYW5jZV9vZl9yZXN1bHQSGAoFdmFsdWUYASABKARCAjABUgV2YWx1ZSJeChJ0cmFuc2Zlcl9hcmd1bWVudHMSGAoEZnJvbRgBIAEoDEIEgLUYBlIEZnJvbRIUCgJ0bxgCIAEoDEIEgLUYBlICdG8SGAoFdmFsdWUYAyABKARCAjABUgV2YWx1ZSIRCg90cmFuc2Zlcl9yZXN1bHQiQAoObWludF9hcmd1bWVudHMSFAoCdG8YASABKAxCBIC1GAZSAnRvEhgKBXZhbHVlGAIgASgEQgIwAVIFdmFsdWUiDQoLbWludF9yZXN1bHQiRAoOYnVybl9hcmd1bWVudHMSGAoEZnJvbRgBIAEoDEIEgLUYBlIEZnJvbRIYCgV2YWx1ZRgCIAEoBEICMAFSBXZhbHVlIg0KC2J1cm5fcmVzdWx0IioKDmJhbGFuY2Vfb2JqZWN0EhgKBXZhbHVlGAEgASgEQgIwAVIFdmFsdWUiQAoKYnVybl9ldmVudBIYCgRmcm9tGAEgASgMQgSAtRgGUgRmcm9tEhgKBXZhbHVlGAIgASgEQgIwAVIFdmFsdWUiPAoKbWludF9ldmVudBIUCgJ0bxgBIAEoDEIEgLUYBlICdG8SGAoFdmFsdWUYAiABKARCAjABUgV2YWx1ZSJaCg50cmFuc2Zl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",
@@ -1158,6 +1165,20 @@ export const tokenAbi: Abi = {
1158
1165
  },
1159
1166
  },
1160
1167
  },
1168
+ events: {
1169
+ "token.mint_event": {
1170
+ argument: "token.mint_args",
1171
+ type: "token.mint_args",
1172
+ },
1173
+ "token.transfer_event": {
1174
+ argument: "token.transfer_args",
1175
+ type: "token.transfer_args",
1176
+ },
1177
+ "token.burn_event": {
1178
+ argument: "token.burn_args",
1179
+ type: "token.burn_args",
1180
+ },
1181
+ },
1161
1182
  };
1162
1183
 
1163
1184
  /**
@@ -1346,6 +1367,13 @@ export const nftAbi: Abi = {
1346
1367
  read_only: false,
1347
1368
  entry_point: 0xdc6f17bb,
1348
1369
  },
1370
+ burn: {
1371
+ argument: "nft.burn_args",
1372
+ return: "",
1373
+ description: "Burn NFT",
1374
+ read_only: false,
1375
+ entry_point: 0x859facc5,
1376
+ },
1349
1377
  },
1350
1378
  types:
1351
1379
  "CoQDCidrb2lub3Nib3gtcHJvdG8vbWFuYXNoYXJlci9jb21tb24ucHJvdG8SBmNvbW1vbhoUa29pbm9zL29wdGlvbnMucHJvdG8iGwoDc3RyEhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIeCgZ1aW50MzISFAoFdmFsdWUYASABKA1SBXZhbHVlIiIKBnVpbnQ2NBIYCgV2YWx1ZRgBIAEoBEICMAFSBXZhbHVlIh0KBWJvb2xlEhQKBXZhbHVlGAEgASgIUgV2YWx1ZSIlCgdhZGRyZXNzEhoKBXZhbHVlGAEgASgMQgSAtRgGUgV2YWx1ZSJdCglsaXN0X2FyZ3MSGgoFc3RhcnQYASABKAxCBIC1GAZSBXN0YXJ0EhQKBWxpbWl0GAIgASgFUgVsaW1pdBIeCgpkZXNjZW5kaW5nGAMgASgIUgpkZXNjZW5kaW5nIi0KCWFkZHJlc3NlcxIgCghhY2NvdW50cxgBIAMoDEIEgLUYBlIIYWNjb3VudHNiBnByb3RvMwqQDAoJbmZ0LnByb3RvEgNuZnQaFGtvaW5vcy9vcHRpb25zLnByb3RvIk0KB3JveWFsdHkSIgoKcGVyY2VudGFnZRgBIAEoBEICMAFSCnBlcmNlbnRhZ2USHgoHYWRkcmVzcxgCIAEoDEIEgLUYBlIHYWRkcmVzcyIvCglyb3lhbHRpZXMSIgoFdmFsdWUYASADKAsyDC5uZnQucm95YWx0eVIFdmFsdWUiTAoNbWV0YWRhdGFfYXJncxIfCgh0b2tlbl9pZBgBIAEoDEIEgLUYAlIHdG9rZW5JZBIaCghtZXRhZGF0YRgCIAEoCVIIbWV0YWRhdGEiZgoEaW5mbxISCgRuYW1lGAEgASgJUgRuYW1lEhYKBnN5bWJvbBgCIAEoCVIGc3ltYm9sEhAKA3VyaRgDIAEoCVIDdXJpEiAKC2Rlc2NyaXB0aW9uGAQgASgJUgtkZXNjcmlwdGlvbiItCg9iYWxhbmNlX29mX2FyZ3MSGgoFb3duZXIYASABKAxCBIC1GAZSBW93bmVyIigKBXRva2VuEh8KCHRva2VuX2lkGAEgASgMQgSAtRgCUgd0b2tlbklkIlgKGGlzX2FwcHJvdmVkX2Zvcl9hbGxfYXJncxIaCgVvd25lchgBIAEoDEIEgLUYBlIFb3duZXISIAoIb3BlcmF0b3IYAiABKAxCBIC1GAZSCG9wZXJhdG9yIkIKCW1pbnRfYXJncxIUCgJ0bxgBIAEoDEIEgLUYBlICdG8SHwoIdG9rZW5faWQYAiABKAxCBIC1GAJSB3Rva2VuSWQiLAoJYnVybl9hcmdzEh8KCHRva2VuX2lkGAEgASgMQgSAtRgCUgd0b2tlbklkInQKDXRyYW5zZmVyX2FyZ3MSGAoEZnJvbRgBIAEoDEIEgLUYBlIEZnJvbRIUCgJ0bxgCIAEoDEIEgLUYBlICdG8SHwoIdG9rZW5faWQYAyABKAxCBIC1GAJSB3Rva2VuSWQSEgoEbWVtbxgEIAEoCVIEbWVtbyJ2CgxhcHByb3ZlX2FyZ3MSLwoQYXBwcm92ZXJfYWRkcmVzcxgBIAEoDEIEgLUYBlIPYXBwcm92ZXJBZGRyZXNzEhQKAnRvGAIgASgMQgSAtRgGUgJ0bxIfCgh0b2tlbl9pZBgDIAEoDEIEgLUYAlIHdG9rZW5JZCKZAQoZc2V0X2FwcHJvdmFsX2Zvcl9hbGxfYXJncxIvChBhcHByb3Zlcl9hZGRyZXNzGAEgASgMQgSAtRgGUg9hcHByb3ZlckFkZHJlc3MSLwoQb3BlcmF0b3JfYWRkcmVzcxgCIAEoDEIEgLUYBlIPb3BlcmF0b3JBZGRyZXNzEhoKCGFwcHJvdmVkGAMgASgIUghhcHByb3ZlZCKCAQoSZ2V0X29wZXJhdG9yc19hcmdzEhoKBW93bmVyGAEgASgMQgSAtRgGUgVvd25lchIaCgVzdGFydBgCIAEoDEIEgLUYBlIFc3RhcnQSFAoFbGltaXQYAyABKAVSBWxpbWl0Eh4KCmRlc2NlbmRpbmcYBCABKAhSCmRlc2NlbmRpbmciVgoUZ2V0X29wZXJhdG9yc19yZXR1cm4SGgoFb3duZXIYASABKAxCBIC1GAZSBW93bmVyEiIKCW9wZXJhdG9ycxgCIAMoDEIEgLUYBlIJb3BlcmF0b3JzImMKD2dldF90b2tlbnNfYXJncxIaCgVzdGFydBgBIAEoDEIEgLUYAlIFc3RhcnQSFAoFbGltaXQYAiABKAVSBWxpbWl0Eh4KCmRlc2NlbmRpbmcYAyABKAhSCmRlc2NlbmRpbmciiAEKGGdldF90b2tlbnNfYnlfb3duZXJfYXJncxIaCgVvd25lchgBIAEoDEIEgLUYBlIFb3duZXISGgoFc3RhcnQYAiABKAxCBIC1GAJSBXN0YXJ0EhQKBWxpbWl0GAMgASgFUgVsaW1pdBIeCgpkZXNjZW5kaW5nGAQgASgIUgpkZXNjZW5kaW5nIi4KCXRva2VuX2lkcxIhCgl0b2tlbl9pZHMYASADKAxCBIC1GAJSCHRva2VuSWRzYgZwcm90bzM=",
@@ -1776,24 +1804,35 @@ export const nftAbi: Abi = {
1776
1804
  events: {
1777
1805
  "collections.owner_event": {
1778
1806
  argument: "common.address",
1807
+ type: "common.address",
1779
1808
  },
1780
1809
  "collections.royalties_event": {
1781
1810
  argument: "nft.royalties",
1811
+ type: "nft.royalties",
1782
1812
  },
1783
1813
  "collections.set_metadata_event": {
1784
1814
  argument: "nft.metadata_args",
1815
+ type: "nft.metadata_args",
1785
1816
  },
1786
1817
  "collections.token_approval_event": {
1787
1818
  argument: "nft.approve_args",
1819
+ type: "nft.approve_args",
1788
1820
  },
1789
1821
  "collections.operator_approval_event": {
1790
1822
  argument: "nft.set_approval_for_all_args",
1823
+ type: "nft.set_approval_for_all_args",
1791
1824
  },
1792
1825
  "collections.transfer_event": {
1793
1826
  argument: "nft.transfer_args",
1827
+ type: "nft.transfer_args",
1794
1828
  },
1795
1829
  "collections.mint_event": {
1796
1830
  argument: "nft.mint_args",
1831
+ type: "nft.mint_args",
1832
+ },
1833
+ "collections.burn_event": {
1834
+ argument: "nft.burn_args",
1835
+ type: "nft.burn_args",
1797
1836
  },
1798
1837
  },
1799
1838
  };