@weilliptic/weil-sdk 1.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/README.md +111 -0
- package/dist/contracts.d.ts +19 -0
- package/dist/contracts.js +86 -0
- package/dist/contracts.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +7 -0
- package/dist/json.js +2 -0
- package/dist/json.js.map +1 -0
- package/dist/podTypes.d.ts +2 -0
- package/dist/podTypes.js +2 -0
- package/dist/podTypes.js.map +1 -0
- package/dist/pods/selectPod.d.ts +2 -0
- package/dist/pods/selectPod.js +25 -0
- package/dist/pods/selectPod.js.map +1 -0
- package/dist/schema.d.ts +29 -0
- package/dist/schema.js +48 -0
- package/dist/schema.js.map +1 -0
- package/dist/transactions/signature.d.ts +33 -0
- package/dist/transactions/signature.js +10 -0
- package/dist/transactions/signature.js.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/utils/common.d.ts +8 -0
- package/dist/utils/common.js +45 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/contract.d.ts +5 -0
- package/dist/utils/contract.js +30 -0
- package/dist/utils/contract.js.map +1 -0
- package/dist/utils/formats.d.ts +6 -0
- package/dist/utils/formats.js +26 -0
- package/dist/utils/formats.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/keys.d.ts +6 -0
- package/dist/utils/keys.js +12 -0
- package/dist/utils/keys.js.map +1 -0
- package/dist/utils/numberToBytes.d.ts +1 -0
- package/dist/utils/numberToBytes.js +15 -0
- package/dist/utils/numberToBytes.js.map +1 -0
- package/dist/utils/utils.test.d.ts +1 -0
- package/dist/utils/utils.test.js +23 -0
- package/dist/utils/utils.test.js.map +1 -0
- package/dist/wallet.d.ts +98 -0
- package/dist/wallet.js +248 -0
- package/dist/wallet.js.map +1 -0
- package/dist/walletCommon.d.ts +66 -0
- package/dist/walletCommon.js +92 -0
- package/dist/walletCommon.js.map +1 -0
- package/dist/walletConnection.d.ts +13 -0
- package/dist/walletConnection.js +31 -0
- package/dist/walletConnection.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
|
|
2
|
+
import base32Decode from 'base32-decode';
|
|
3
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
4
|
+
import base32Encode from 'base32-encode';
|
|
5
|
+
import { numberToBytes } from './numberToBytes.js';
|
|
6
|
+
export const decodeContractAddress = (contractAddress) => {
|
|
7
|
+
const entry = base32Decode(contractAddress.toUpperCase(), 'RFC4648');
|
|
8
|
+
const view = new DataView(entry);
|
|
9
|
+
const podCounter = view.getUint32(0, false);
|
|
10
|
+
return {
|
|
11
|
+
contractAddress: bytesToHex(new Uint8Array(view.buffer.slice(8))),
|
|
12
|
+
counter: podCounter,
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export const createContractAddress = (publicKey, nonce, podCounter) => {
|
|
16
|
+
let toBeHashed = new Uint8Array([
|
|
17
|
+
...numberToBytes(nonce),
|
|
18
|
+
...hexToBytes(publicKey),
|
|
19
|
+
]);
|
|
20
|
+
const contractAddress = sha256(toBeHashed).slice(0, 32);
|
|
21
|
+
const buffer = new ArrayBuffer(4 + contractAddress.length);
|
|
22
|
+
const view = new DataView(buffer);
|
|
23
|
+
view.setUint32(0, podCounter);
|
|
24
|
+
for (let i = 0; i < contractAddress.length; i++) {
|
|
25
|
+
view.setUint8(4 + i, contractAddress[i]);
|
|
26
|
+
}
|
|
27
|
+
const uint8Array = new Uint8Array(buffer);
|
|
28
|
+
return base32Encode(uint8Array, 'RFC4648', { padding: false }).toLowerCase();
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/utils/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,eAAuB,EAAE,EAAE;IAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAA;IAEpE,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAE3C,OAAO;QACL,eAAe,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,EAAE,UAAU;KACpB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,SAAiB,EACjB,KAAa,EACb,UAAkB,EAClB,EAAE;IACF,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC;QAC9B,GAAG,aAAa,CAAC,KAAK,CAAC;QACvB,GAAG,UAAU,CAAC,SAAS,CAAC;KACzB,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEvD,MAAM,MAAM,GAAgB,IAAI,WAAW,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IACvE,MAAM,IAAI,GAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAEzC,OAAO,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;AAC9E,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const binToHex: (bin: Uint8Array) => string;
|
|
2
|
+
export declare function base64ToBytes(base64: string): Uint8Array<ArrayBuffer>;
|
|
3
|
+
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
4
|
+
export declare const ensureHexPrefix: (str: string) => string;
|
|
5
|
+
export declare const ensureNoHexPrefix: (str: string) => string;
|
|
6
|
+
export declare const blobToHex: (blob: Blob) => Promise<string>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { bytesToHex } from '@noble/hashes/utils';
|
|
2
|
+
export const binToHex = (bin) => [...bin].map(n => n.toString(16).padStart(2, '0')).join('');
|
|
3
|
+
export function base64ToBytes(base64) {
|
|
4
|
+
const binString = atob(base64);
|
|
5
|
+
return Uint8Array.from({ length: binString.length }, (_m, i) => binString.codePointAt(i));
|
|
6
|
+
}
|
|
7
|
+
export function bytesToBase64(bytes) {
|
|
8
|
+
const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join('');
|
|
9
|
+
return btoa(binString);
|
|
10
|
+
}
|
|
11
|
+
export const ensureHexPrefix = (str) => str.startsWith('0x') ? str : `0x${str}`;
|
|
12
|
+
export const ensureNoHexPrefix = (str) => str.startsWith('0x') ? str.substring(2) : str;
|
|
13
|
+
export const blobToHex = async (blob) => {
|
|
14
|
+
const reader = blob.stream().getReader();
|
|
15
|
+
let done = false;
|
|
16
|
+
let result = '';
|
|
17
|
+
do {
|
|
18
|
+
const { value, done: nowDone } = await reader.read();
|
|
19
|
+
if (value) {
|
|
20
|
+
result += bytesToHex(value);
|
|
21
|
+
}
|
|
22
|
+
done = nowDone;
|
|
23
|
+
} while (!done);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/utils/formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAe,EAAE,EAAE,CACzC,CAAC,GAAG,GAAG,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE3E,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAE9B,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAC7D,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1E,EAAE,CACH,CAAA;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7C,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAA;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC/C,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAA;IACxC,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,GAAG,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;QACD,IAAI,GAAG,OAAO,CAAA;IAChB,CAAC,QAAQ,CAAC,IAAI,EAAC;IAEf,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './common';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { HDKey } from '@scure/bip32';
|
|
2
|
+
export declare const getUncompressedPublicKey: (privateKey: string) => string;
|
|
3
|
+
export declare const addressFromPublicKey: (publicKey: string) => string;
|
|
4
|
+
export declare const addressFromPrivateKey: (privateKey: string) => string;
|
|
5
|
+
export declare const getAccountDerivationPath: (accountIndex: number) => string;
|
|
6
|
+
export declare const deriveAccountKey: (masterKey: HDKey, accountIndex: number) => HDKey;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// TODO figure out interdependency with ts-common
|
|
2
|
+
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
3
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
|
|
4
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
5
|
+
export const getUncompressedPublicKey = (privateKey) => bytesToHex(secp256k1.getPublicKey(hexToBytes(privateKey), false));
|
|
6
|
+
export const addressFromPublicKey = (publicKey) => bytesToHex(sha256(hexToBytes(publicKey)));
|
|
7
|
+
export const addressFromPrivateKey = (privateKey) => addressFromPublicKey(getUncompressedPublicKey(privateKey));
|
|
8
|
+
// https://github.com/satoshilabs/slips/blob/master/slip-0044.md
|
|
9
|
+
const coinType = 9345;
|
|
10
|
+
export const getAccountDerivationPath = (accountIndex) => `m/44'/${coinType}'/0'/0/${accountIndex}`;
|
|
11
|
+
export const deriveAccountKey = (masterKey, accountIndex) => masterKey.derive(getAccountDerivationPath(accountIndex));
|
|
12
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/utils/keys.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAI7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAAkB,EAAE,EAAE,CAC7D,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAE,EAAE,CACxD,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAE,EAAE,CAC1D,oBAAoB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAA;AAE5D,gEAAgE;AAChE,MAAM,QAAQ,GAAG,IAAI,CAAA;AAErB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,YAAoB,EAAE,EAAE,CAC/D,SAAS,QAAQ,UAAU,YAAY,EAAE,CAAA;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAgB,EAAE,YAAoB,EAAE,EAAE,CACzE,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const numberToBytes: (num: number, length?: number) => number[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const numberToBytes = (num, length = 8) => {
|
|
2
|
+
const result = Array.from({ length }, () => 0);
|
|
3
|
+
let cursor = 0;
|
|
4
|
+
while (num > 0) {
|
|
5
|
+
if (cursor >= length) {
|
|
6
|
+
throw new Error(`Provided number overflows the byte buffer of length ${length}`);
|
|
7
|
+
}
|
|
8
|
+
const mod = num % 256;
|
|
9
|
+
num = (num - mod) / 256;
|
|
10
|
+
result[length - 1 - cursor] = mod;
|
|
11
|
+
cursor += 1;
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=numberToBytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numberToBytes.js","sourceRoot":"","sources":["../../src/utils/numberToBytes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QACf,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,uDAAuD,MAAM,EAAE,CAChE,CAAA;QACH,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;QACrB,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACvB,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAA;QACjC,MAAM,IAAI,CAAC,CAAA;IACb,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, test } from '@jest/globals';
|
|
2
|
+
import { numberToBytes } from './numberToBytes.js.js.js.js.js.js';
|
|
3
|
+
describe('numberToBytes', () => {
|
|
4
|
+
test('converts correctly', () => {
|
|
5
|
+
expect(numberToBytes(0)).toEqual([0, 0, 0, 0, 0, 0, 0, 0]);
|
|
6
|
+
expect(numberToBytes(1)).toEqual([0, 0, 0, 0, 0, 0, 0, 1]);
|
|
7
|
+
expect(numberToBytes(256)).toEqual([0, 0, 0, 0, 0, 0, 1, 0]);
|
|
8
|
+
expect(numberToBytes(257)).toEqual([0, 0, 0, 0, 0, 0, 1, 1]);
|
|
9
|
+
expect(numberToBytes(256 ** 6 - 1, 6)).toEqual([
|
|
10
|
+
255, 255, 255, 255, 255, 255,
|
|
11
|
+
]);
|
|
12
|
+
expect(numberToBytes(0, 4)).toEqual([0, 0, 0, 0]);
|
|
13
|
+
expect(numberToBytes(1, 4)).toEqual([0, 0, 0, 1]);
|
|
14
|
+
expect(numberToBytes(256, 4)).toEqual([0, 0, 1, 0]);
|
|
15
|
+
expect(numberToBytes(257, 4)).toEqual([0, 0, 1, 1]);
|
|
16
|
+
expect(numberToBytes(0, 2)).toEqual([0, 0]);
|
|
17
|
+
expect(numberToBytes(255, 2)).toEqual([0, 255]);
|
|
18
|
+
expect(numberToBytes(256, 2)).toEqual([1, 0]);
|
|
19
|
+
expect(numberToBytes(257, 2)).toEqual([1, 1]);
|
|
20
|
+
expect(numberToBytes(256 ** 2 - 1, 2)).toEqual([255, 255]);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/utils/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5D,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE5D,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC,CAAA;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/wallet.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { TransactionTransport } from './utils/index';
|
|
2
|
+
import { PodSpecifier } from './podTypes';
|
|
3
|
+
import { PodResultDetail, SubmitTransactionParams, WeilWalletCommon } from './walletCommon';
|
|
4
|
+
interface WeilWalletRequestData {
|
|
5
|
+
request_id: string;
|
|
6
|
+
category: 'ClusterManagement';
|
|
7
|
+
request_type: string;
|
|
8
|
+
}
|
|
9
|
+
interface WeilWalletResponseData {
|
|
10
|
+
requestId: string;
|
|
11
|
+
status: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PodRequestData extends WeilWalletRequestData {
|
|
14
|
+
request_type: 'GetPodInfo';
|
|
15
|
+
}
|
|
16
|
+
export interface PodResultNode {
|
|
17
|
+
host: string;
|
|
18
|
+
port: number;
|
|
19
|
+
}
|
|
20
|
+
export interface PodResponseData extends WeilWalletResponseData {
|
|
21
|
+
result: {
|
|
22
|
+
podDetails: PodResultDetail[];
|
|
23
|
+
totalPods: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface WeilWalletConstructorOptions {
|
|
27
|
+
privateKey: string;
|
|
28
|
+
sentinelEndpoint: string;
|
|
29
|
+
transport?: TransactionTransport;
|
|
30
|
+
}
|
|
31
|
+
type WeilWalletConfig = WeilWalletConstructorOptions & {
|
|
32
|
+
transport: TransactionTransport;
|
|
33
|
+
};
|
|
34
|
+
export interface TransactionRequestData<T> {
|
|
35
|
+
transaction: {
|
|
36
|
+
is_xpod: boolean;
|
|
37
|
+
txn_header: {
|
|
38
|
+
nonce: number;
|
|
39
|
+
public_key: string;
|
|
40
|
+
from_addr: string;
|
|
41
|
+
signature: string;
|
|
42
|
+
to_addr: string;
|
|
43
|
+
weilpod_counter: number;
|
|
44
|
+
creation_time: number;
|
|
45
|
+
};
|
|
46
|
+
user_txn: T;
|
|
47
|
+
verifier: {
|
|
48
|
+
type: 'DefaultVerifier';
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
interface TransactionResult {
|
|
53
|
+
batch_author: string;
|
|
54
|
+
batch_id: string;
|
|
55
|
+
block_height: string;
|
|
56
|
+
contract_address: string;
|
|
57
|
+
creation_time: string;
|
|
58
|
+
method_kind: string;
|
|
59
|
+
txn_result: string;
|
|
60
|
+
tx_idx: number;
|
|
61
|
+
transaction_id: string;
|
|
62
|
+
}
|
|
63
|
+
export interface SuccessResult extends TransactionResult {
|
|
64
|
+
status: 'Finalized';
|
|
65
|
+
}
|
|
66
|
+
export interface FailedResult extends TransactionResult {
|
|
67
|
+
status: 'Failed';
|
|
68
|
+
}
|
|
69
|
+
export type TransactionResponseData = SuccessResult | FailedResult;
|
|
70
|
+
export interface ExecuteOptions {
|
|
71
|
+
stream?: boolean;
|
|
72
|
+
headers?: Record<string, string>;
|
|
73
|
+
}
|
|
74
|
+
export interface DeployOptions {
|
|
75
|
+
name?: string;
|
|
76
|
+
pods?: PodSpecifier;
|
|
77
|
+
config?: string;
|
|
78
|
+
context?: string;
|
|
79
|
+
upgrade?: boolean;
|
|
80
|
+
logo?: string;
|
|
81
|
+
author?: string;
|
|
82
|
+
description?: string;
|
|
83
|
+
organization?: string;
|
|
84
|
+
outcall?: boolean;
|
|
85
|
+
auditLog?: boolean;
|
|
86
|
+
}
|
|
87
|
+
export declare const isAsyncIterable: <T>(value: any) => value is AsyncIterable<T>;
|
|
88
|
+
export declare class WeilWallet extends WeilWalletCommon {
|
|
89
|
+
config: WeilWalletConfig;
|
|
90
|
+
constructor(options: WeilWalletConstructorOptions);
|
|
91
|
+
getAxiosInstance(): Promise<import("axios").AxiosInstance>;
|
|
92
|
+
private getTransactionId;
|
|
93
|
+
submitTransaction(params: SubmitTransactionParams): Promise<any>;
|
|
94
|
+
transactions: {
|
|
95
|
+
submit: (params: SubmitTransactionParams) => Promise<any>;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export {};
|
package/dist/wallet.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import axios, { isAxiosError } from 'axios';
|
|
2
|
+
import { constructRestEndpoint, constructTransactionEndpoint, defaultTransport, formatPayloadForPrint, gzip, } from './utils/index.js';
|
|
3
|
+
import { WeilError } from './errors.js';
|
|
4
|
+
import { createContractAddress, decodeContractAddress } from './utils/contract.js';
|
|
5
|
+
import { getSignature, } from './transactions/signature.js';
|
|
6
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
7
|
+
import { addressFromPublicKey, getUncompressedPublicKey } from './utils/keys.js';
|
|
8
|
+
import base32Encode from 'base32-encode';
|
|
9
|
+
import { WeilWalletCommon, } from './walletCommon.js';
|
|
10
|
+
let debugLog = console.log.bind(console);
|
|
11
|
+
const isDebug = false;
|
|
12
|
+
if (!isDebug) {
|
|
13
|
+
debugLog = (...args) => undefined;
|
|
14
|
+
}
|
|
15
|
+
async function* convertIterable(iterable) {
|
|
16
|
+
for await (const chunk of iterable) {
|
|
17
|
+
const decoder = new TextDecoder();
|
|
18
|
+
yield decoder.decode(chunk);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function executeStreamNode(endpoint, gzippedPayload) {
|
|
22
|
+
const formData = new FormData();
|
|
23
|
+
formData.append('transaction', new Blob([gzippedPayload], { type: 'application/octet-stream' }));
|
|
24
|
+
const response = await axios.post(endpoint, formData, {
|
|
25
|
+
responseType: 'stream',
|
|
26
|
+
});
|
|
27
|
+
return convertIterable(response.data);
|
|
28
|
+
}
|
|
29
|
+
const sendTransactionViaTransport = async (endpoint, payload, headers = {}, transport = 'multipart') => {
|
|
30
|
+
const formData = new FormData();
|
|
31
|
+
let body = formData;
|
|
32
|
+
if (transport === 'multipart') {
|
|
33
|
+
const gzippedPayload = await gzip(JSON.stringify(payload));
|
|
34
|
+
formData.append('transaction', new Blob([gzippedPayload], { type: 'application/octet-stream' }));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
body = JSON.stringify(payload);
|
|
38
|
+
}
|
|
39
|
+
debugLog(`sending a POST request (${transport})`, new Date());
|
|
40
|
+
if (transport === 'post') {
|
|
41
|
+
headers['content-type'] = 'application/json';
|
|
42
|
+
}
|
|
43
|
+
return await fetch(endpoint, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
body,
|
|
46
|
+
headers,
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const executeStream = async (endpoint, payload, headers, transport = defaultTransport) => {
|
|
50
|
+
const response = await sendTransactionViaTransport(endpoint, payload, headers, transport);
|
|
51
|
+
if (!response.body) {
|
|
52
|
+
throw new Error('No response body!');
|
|
53
|
+
}
|
|
54
|
+
debugLog('got POST stream response', new Date());
|
|
55
|
+
const reader = response.body.getReader();
|
|
56
|
+
debugLog('got reader', new Date());
|
|
57
|
+
return (async function* convertReader() {
|
|
58
|
+
let done = false;
|
|
59
|
+
let value;
|
|
60
|
+
debugLog('before while loop in reader', new Date());
|
|
61
|
+
let firstChunk = true;
|
|
62
|
+
while (!done) {
|
|
63
|
+
;
|
|
64
|
+
({ done, value } = await reader.read());
|
|
65
|
+
if (firstChunk) {
|
|
66
|
+
firstChunk = false;
|
|
67
|
+
debugLog('got first chunk');
|
|
68
|
+
}
|
|
69
|
+
if (value) {
|
|
70
|
+
const decoder = new TextDecoder();
|
|
71
|
+
const decoded = decoder.decode(value, { stream: true });
|
|
72
|
+
yield decoded;
|
|
73
|
+
}
|
|
74
|
+
if (done) {
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
})();
|
|
79
|
+
};
|
|
80
|
+
const execute = async (endpoint, payload, headers, contractAddress, transactionId, transport = defaultTransport) => {
|
|
81
|
+
try {
|
|
82
|
+
const response = await sendTransactionViaTransport(endpoint, payload, headers, transport);
|
|
83
|
+
const responseData = await response.json();
|
|
84
|
+
return {
|
|
85
|
+
...responseData,
|
|
86
|
+
contract_address: contractAddress,
|
|
87
|
+
transaction_id: transactionId,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (isAxiosError(error)) {
|
|
92
|
+
if (error.response?.data instanceof Object &&
|
|
93
|
+
typeof error.response.data.message === 'string') {
|
|
94
|
+
error.message = error.response.data.message;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
export const isAsyncIterable = (value) => {
|
|
104
|
+
return Boolean(value[Symbol.asyncIterator]);
|
|
105
|
+
};
|
|
106
|
+
export class WeilWallet extends WeilWalletCommon {
|
|
107
|
+
config;
|
|
108
|
+
constructor(options) {
|
|
109
|
+
super();
|
|
110
|
+
this.config = {
|
|
111
|
+
...options,
|
|
112
|
+
transport: options.transport || defaultTransport,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async getAxiosInstance() {
|
|
116
|
+
if (!this._axiosInstance) {
|
|
117
|
+
this._axiosInstance = axios.create({
|
|
118
|
+
baseURL: constructRestEndpoint(this.config.sentinelEndpoint),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return this._axiosInstance;
|
|
122
|
+
}
|
|
123
|
+
getTransactionId(podCounter, signature) {
|
|
124
|
+
const id = sha256(signature);
|
|
125
|
+
const data = new Uint8Array(4 + id.length);
|
|
126
|
+
new DataView(data.buffer).setUint32(0, podCounter);
|
|
127
|
+
data.set(id, 4);
|
|
128
|
+
return base32Encode(data, 'RFC4648', { padding: false }).toLowerCase();
|
|
129
|
+
}
|
|
130
|
+
async submitTransaction(params) {
|
|
131
|
+
const { toAddress, contract, headers } = params;
|
|
132
|
+
const { sentinelEndpoint, transport, privateKey } = this.config;
|
|
133
|
+
const publicKey = getUncompressedPublicKey(privateKey);
|
|
134
|
+
const fromAddress = addressFromPublicKey(publicKey);
|
|
135
|
+
let targetPodCounter;
|
|
136
|
+
if (params.contract.type === 'SmartContractExecutor') {
|
|
137
|
+
const contractMetaInfo = decodeContractAddress(params.contract.address);
|
|
138
|
+
targetPodCounter = contractMetaInfo.counter;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// deploy path
|
|
142
|
+
const podId = params.contract.pod;
|
|
143
|
+
const pods = await this.pods.list();
|
|
144
|
+
targetPodCounter = pods.find(pod => pod.podId === podId)?.counter;
|
|
145
|
+
}
|
|
146
|
+
const creationTime = new Date().getTime();
|
|
147
|
+
const nonce = params.nonce ?? creationTime;
|
|
148
|
+
let userTransaction;
|
|
149
|
+
let contractAddress;
|
|
150
|
+
switch (contract.type) {
|
|
151
|
+
case 'SmartContractExecutor':
|
|
152
|
+
contractAddress = contract.address;
|
|
153
|
+
userTransaction = {
|
|
154
|
+
contract_address: contractAddress,
|
|
155
|
+
contract_input_bytes: JSON.stringify(contract.arguments),
|
|
156
|
+
contract_method: contract.method,
|
|
157
|
+
type: contract.type,
|
|
158
|
+
};
|
|
159
|
+
break;
|
|
160
|
+
case 'SmartContractCreator':
|
|
161
|
+
contractAddress = createContractAddress(publicKey, nonce, targetPodCounter);
|
|
162
|
+
// important to keep props sorted alphabetically
|
|
163
|
+
userTransaction = {
|
|
164
|
+
contract_body: contract.body,
|
|
165
|
+
init_args: contract.init_args || JSON.stringify({ values: '' }),
|
|
166
|
+
// is_audit_log_enabled: contract.auditLog,
|
|
167
|
+
// is_outcall_enabled: contract.outcall,
|
|
168
|
+
smart_contract_header_metadata: {
|
|
169
|
+
author: contract.author || null,
|
|
170
|
+
contract_address: contractAddress,
|
|
171
|
+
contract_body_len: contract.body.length / 2,
|
|
172
|
+
contract_config: contract.config || null,
|
|
173
|
+
contract_context: contract.context || null,
|
|
174
|
+
contract_widl: contract.widl,
|
|
175
|
+
description: contract.description || null,
|
|
176
|
+
logo: contract.logo || null,
|
|
177
|
+
name: contract.name || null,
|
|
178
|
+
organization: contract.organization || null,
|
|
179
|
+
upgrade_contract: contract.upgrade,
|
|
180
|
+
},
|
|
181
|
+
type: contract.type,
|
|
182
|
+
};
|
|
183
|
+
break;
|
|
184
|
+
default:
|
|
185
|
+
throw new WeilError('Invalid contract type');
|
|
186
|
+
}
|
|
187
|
+
const signableTransaction = {
|
|
188
|
+
from_addr: fromAddress,
|
|
189
|
+
nonce: Number(nonce),
|
|
190
|
+
to_addr: toAddress,
|
|
191
|
+
user_txn: userTransaction,
|
|
192
|
+
};
|
|
193
|
+
const signature = getSignature(signableTransaction, this.config.privateKey);
|
|
194
|
+
if (contract.type === 'SmartContractCreator') {
|
|
195
|
+
const userTxn = signableTransaction.user_txn;
|
|
196
|
+
userTxn.is_audit_log_enabled = contract.auditLog;
|
|
197
|
+
userTxn.is_outcall_enabled = contract.outcall;
|
|
198
|
+
}
|
|
199
|
+
let payload = {
|
|
200
|
+
transaction: {
|
|
201
|
+
is_xpod: false,
|
|
202
|
+
txn_header: {
|
|
203
|
+
from_addr: fromAddress,
|
|
204
|
+
nonce: Number(nonce),
|
|
205
|
+
public_key: publicKey,
|
|
206
|
+
to_addr: toAddress,
|
|
207
|
+
signature,
|
|
208
|
+
weilpod_counter: targetPodCounter,
|
|
209
|
+
creation_time: creationTime,
|
|
210
|
+
},
|
|
211
|
+
user_txn: userTransaction,
|
|
212
|
+
verifier: {
|
|
213
|
+
type: 'DefaultVerifier',
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
const transactionId = this.getTransactionId(targetPodCounter, signature);
|
|
218
|
+
const endpoint = constructTransactionEndpoint(sentinelEndpoint, contract.type, transport);
|
|
219
|
+
debugLog(`Submitting to ${endpoint}`);
|
|
220
|
+
debugLog(formatPayloadForPrint(payload));
|
|
221
|
+
switch (contract.type) {
|
|
222
|
+
case 'SmartContractCreator':
|
|
223
|
+
const gzippedPayload = await gzip(JSON.stringify(payload));
|
|
224
|
+
const deployResult = await axios.postForm(endpoint, {
|
|
225
|
+
transaction: gzippedPayload,
|
|
226
|
+
}, {
|
|
227
|
+
headers,
|
|
228
|
+
});
|
|
229
|
+
return {
|
|
230
|
+
contract_address: contractAddress,
|
|
231
|
+
...deployResult.data,
|
|
232
|
+
};
|
|
233
|
+
case 'SmartContractExecutor':
|
|
234
|
+
if (params.stream) {
|
|
235
|
+
return executeStream(endpoint, payload, headers, transport);
|
|
236
|
+
}
|
|
237
|
+
return execute(endpoint, payload, headers, contractAddress, transactionId, transport);
|
|
238
|
+
default:
|
|
239
|
+
throw new WeilError(`Invalid contract type`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
transactions = {
|
|
243
|
+
submit: async (params) => {
|
|
244
|
+
return this.submitTransaction(params);
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { DeployOptions, ExecuteOptions, PodResultNode } from './wallet';
|
|
3
|
+
import { JsonObject } from './json';
|
|
4
|
+
export interface PodResultDetail {
|
|
5
|
+
activeNodes: PodResultNode[];
|
|
6
|
+
inactiveNodes: PodResultNode[];
|
|
7
|
+
http_port: number;
|
|
8
|
+
counter: number;
|
|
9
|
+
podId: string;
|
|
10
|
+
}
|
|
11
|
+
interface DeploymentContractParams {
|
|
12
|
+
name?: string;
|
|
13
|
+
body: string;
|
|
14
|
+
widl: string;
|
|
15
|
+
init_args?: string;
|
|
16
|
+
config?: string;
|
|
17
|
+
context?: string;
|
|
18
|
+
author?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
organization?: string;
|
|
21
|
+
logo?: string;
|
|
22
|
+
upgrade: boolean;
|
|
23
|
+
auditLog: boolean;
|
|
24
|
+
outcall: boolean;
|
|
25
|
+
}
|
|
26
|
+
interface ExecutionContractParams {
|
|
27
|
+
address: string;
|
|
28
|
+
method: string;
|
|
29
|
+
arguments: JsonObject;
|
|
30
|
+
}
|
|
31
|
+
export interface SubmitTransactionParams {
|
|
32
|
+
toAddress: string;
|
|
33
|
+
stream?: boolean;
|
|
34
|
+
headers?: Record<string, string>;
|
|
35
|
+
contract: ({
|
|
36
|
+
type: 'SmartContractCreator';
|
|
37
|
+
} & DeploymentContractParams & {
|
|
38
|
+
pod: string;
|
|
39
|
+
}) | ({
|
|
40
|
+
type: 'SmartContractExecutor';
|
|
41
|
+
} & ExecutionContractParams);
|
|
42
|
+
nonce?: number;
|
|
43
|
+
}
|
|
44
|
+
export declare class WeilWalletCommon {
|
|
45
|
+
_axiosInstance: AxiosInstance;
|
|
46
|
+
getAxiosInstance(): Promise<AxiosInstance>;
|
|
47
|
+
podsCache?: PodResultDetail[];
|
|
48
|
+
constructor();
|
|
49
|
+
private listPods;
|
|
50
|
+
submitTransaction(_params: SubmitTransactionParams): Promise<any>;
|
|
51
|
+
pods: {
|
|
52
|
+
list: () => Promise<PodResultDetail[]>;
|
|
53
|
+
listNonSenate: () => Promise<PodResultDetail[]>;
|
|
54
|
+
listSenate: () => Promise<PodResultDetail[]>;
|
|
55
|
+
};
|
|
56
|
+
transactions: {
|
|
57
|
+
submit: (params: SubmitTransactionParams) => Promise<any>;
|
|
58
|
+
};
|
|
59
|
+
contracts: {
|
|
60
|
+
deploy: (body: string, widl: string, { name, pods: podsSpecifier, upgrade, logo, author, description, organization, config, context, outcall, auditLog, }: DeployOptions) => Promise<any[]>;
|
|
61
|
+
execute: <T extends ExecuteOptions>(contractAddress: string, method: string, params?: any, options?: T) => T extends {
|
|
62
|
+
stream: true;
|
|
63
|
+
} ? Promise<AsyncIterable<string>> : Promise<any>;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export {};
|