From e2cfcabcceeee024add5795efbafd9305c8064f1 Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Sun, 23 Oct 2022 19:52:09 +0200 Subject: [PATCH] added support for wasm files in npm package --- client-js/src/index.ts | 70 +++++++++++++--------------- client-js/test/install.ts | 3 -- client-js/tsconfig.json | 3 +- client/balance_of_session/.DS_Store | Bin 0 -> 6148 bytes client/mint_session/.DS_Store | Bin 0 -> 6148 bytes 5 files changed, 34 insertions(+), 42 deletions(-) create mode 100644 client/balance_of_session/.DS_Store create mode 100644 client/mint_session/.DS_Store diff --git a/client-js/src/index.ts b/client-js/src/index.ts index 3ab0e0bc..467d9908 100644 --- a/client-js/src/index.ts +++ b/client-js/src/index.ts @@ -16,6 +16,7 @@ import { } from "casper-js-sdk"; import { concat } from "@ethersproject/bytes"; import { Some } from "ts-results"; +import * as fs from "fs"; const { Contract, toCLMap, fromCLMap } = Contracts; @@ -53,9 +54,17 @@ const convertHashStrToHashBuff = (hashStr: string) => { return Buffer.from(hashHex, "hex"); }; +// TODO: In future, when we want to support also +// browser version - we will need to polyfill this +// and move to some separate module. +export const getBinary = (pathToBinary: string) => { + return new Uint8Array(fs.readFileSync(pathToBinary, null).buffer); +}; + export class CEP78Client { casperClient: CasperClient; contractClient: Contracts.Contract; + contractHashKey: CLKey; constructor(public nodeAddress: string, public networkName: string) { this.casperClient = new CasperClient(nodeAddress); @@ -63,12 +72,15 @@ export class CEP78Client { } public install( - wasm: Uint8Array, args: CEP78InstallArgs, paymentAmount: string, deploySender: CLPublicKey, - keys?: Keys.AsymmetricKey[] + keys?: Keys.AsymmetricKey[], + wasm?: Uint8Array ) { + const wasmToInstall = + wasm || getBinary(`${__dirname}/../wasm/contract.wasm`); + const runtimeArgs = RuntimeArgs.fromMap({ collection_name: CLValueBuilder.string(args.collectionName), collection_symbol: CLValueBuilder.string(args.collectionSymbol), @@ -118,7 +130,7 @@ export class CEP78Client { } return this.contractClient.install( - wasm, + wasmToInstall, runtimeArgs, paymentAmount, deploySender, @@ -133,6 +145,9 @@ export class CEP78Client { bootstrap?: boolean ) { this.contractClient.setContractHash(contractHash, contractPackageHash); + this.contractHashKey = CLValueBuilder.key( + CLValueBuilder.byteArray(convertHashStrToHashBuff(contractHash)) + ); if (bootstrap) { // TODO: Set all possible config options inside the client and validate every client call. @@ -235,44 +250,22 @@ export class CEP78Client { wasm?: Uint8Array ) { // TODO: Add metadata validation + const wasmToCall = wasm || getBinary(`${__dirname}/../wasm/contract.wasm`); const runtimeArgs = RuntimeArgs.fromMap({ token_owner: CLValueBuilder.key(owner), token_meta_data: CLValueBuilder.string(JSON.stringify(meta)), + nft_contracy_hash: this.contractHashKey, }); - let preparedDeploy: DeployUtil.Deploy; - - if (!wasm) { - preparedDeploy = this.contractClient.callEntrypoint( - "mint", - runtimeArgs, - deploySender, - this.networkName, - paymentAmount, - keys - ); - } else { - if (!this.contractClient?.contractHash) { - throw Error("Missing contractHash"); - } - runtimeArgs.insert( - "nft_contract_hash", - CLValueBuilder.key( - CLValueBuilder.byteArray( - convertHashStrToHashBuff(this.contractClient?.contractHash) - ) - ) - ); - preparedDeploy = this.contractClient.install( - wasm, - runtimeArgs, - paymentAmount, - deploySender, - this.networkName, - keys - ); - } + const preparedDeploy = this.contractClient.install( + wasmToCall, + runtimeArgs, + paymentAmount, + deploySender, + this.networkName, + keys + ); return preparedDeploy; } @@ -281,14 +274,13 @@ export class CEP78Client { tokenId: string, paymentAmount: string, deploySender: CLPublicKey, - keys?: Keys.AsymmetricKey[], - wasm?: Uint8Array + keys?: Keys.AsymmetricKey[] ) { const runtimeArgs = RuntimeArgs.fromMap({ token_id: CLValueBuilder.u64(tokenId), }); - return this.contractClient.callEntrypoint( + const preparedDeploy = this.contractClient.callEntrypoint( "burn", runtimeArgs, deploySender, @@ -296,5 +288,7 @@ export class CEP78Client { paymentAmount, keys ); + + return preparedDeploy; } } diff --git a/client-js/test/install.ts b/client-js/test/install.ts index 17494bdf..e977bf24 100644 --- a/client-js/test/install.ts +++ b/client-js/test/install.ts @@ -34,9 +34,6 @@ const install = async () => { const cc = new CEP78Client(process.env.NODE_URL!, process.env.NETWORK_NAME!); const installDeploy = await cc.install( - getBinary( - "../contract/target/wasm32-unknown-unknown/release/contract.wasm" - ), { collectionName: "my-collection", collectionSymbol: "AMAG-ASSETS", diff --git a/client-js/tsconfig.json b/client-js/tsconfig.json index ba921742..6a7d38a3 100644 --- a/client-js/tsconfig.json +++ b/client-js/tsconfig.json @@ -25,7 +25,8 @@ ] }, "include": [ - "./src/**/*" + "./src/**/*", + "./src/wasm/**/*" ], "exclude": ["./test/**/*", "*/*.test.ts"] } diff --git a/client/balance_of_session/.DS_Store b/client/balance_of_session/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c77ae6ed01f6d8dc26f00358230f7fac15fe8deb GIT binary patch literal 6148 zcmeHKPfrs;6n_Jic0ud{t%C8eu@@6aET%Cr#!w4Ji7^mLun1Uo+o7&(XPVtD6$nYs zdh!GK8N8Z!^W-P+X8Z_x_2!#D4c6k-7@e2Q{NB7jGdsV{&f5V1Qfk-d0c-$BVH21b z#qJCde$fVGNLz*xiJXH%>~*4+7jSPN+87K2hJnA00rBmQKnyN~(18B$_np@Y{3y=n zKaru~#JQ1V(n^jccgoLrryRR+J1V*1mKd#b9(X<7^)`IksoI%E&SKYRG?WQ`onpxL zW1rP|r^MT=9?9IYa#&W%s@l`X$Ax@h&MDlSKbdomZ{5fXy>N13rLwu}x7VusL6h;9 zibR5Ej+AkYJ$Qvm-=6&1fj*PShu)sP*tXtP${HOzKYk%?PfSitWG1rN?8Qsj>6yzj zReQ>FYx|8*JnbS6cvuSBbgL2i^>WLt`K(ci>5I7RAJM8k`Ag^;tv@|Atsk~9CUa_# z)7=j#Wpciiy}gLWm8zYNY9SATRUY}V&)Mcr-p%a@xn7QGbD8aNT=4*TUTKN2XoH3k z;y`|7(+xwHHE8K@CvZI)tgsS~W8SRzHO|zNr{%ObTn(w1GPm$eF_|kq>?zljVna?T zSP?QkO(R)nZj)NM;;J%OSTttgExSC8ffq3^rx87*$im5Qe$Vkjnyz<82FDF z5a)w~O<+-DSD`#Qu#;B+!~~k9pf2tbBFE8K)Yw&s9u%Td5mhSDR}7-k(eCKDqQ_xFDpWIDruVc_3nfFzd6 zOC{W!uB`*R6t&jDwu?=Oi0dkpDcI?9EEQ3Tr?E*vpCc5+qQ~*4+7jSPN+87K2hJnA00rBmQKnyN~(18B$_np@Y{3y=n zKaru~#JQ1V(n^jccgoLrryRR+J1V*1mKd#b9(X<7^)`IksoI%E&SKYRG?WQ`onpxL zW1rP|r^MT=9?9IYa#&W%s@l`X$Ax@h&MDlSKbdomZ{5fXy>N13rLwu}x7VusL6h;9 zibR5Ej+AkYJ$Qvm-=6&1fj*PShu)sP*tXtP${HOzKYk%?PfSitWG1rN?8Qsj>6yzj zReQ>FYx|8*JnbS6cvuSBbgL2i^>WLt`K(ci>5I7RAJM8k`Ag^;tv@|Atsk~9CUa_# z)7=j#Wpciiy}gLWm8zYNY9SATRUY}V&)Mcr-p%a@xn7QGbD8aNT=4*TUTKN2XoH3k z;y`|7(+xwHHE8K@CvZI)tgsS~W8SRzHO|zNr{%ObTn(w1GPm$eF_|kq>?zljVna?T zSP?QkO(R)nZj)NM;;J%OSTttgExSC8ffq3^rx87*$im5Qe$Vkjnyz<82FDF z5a)w~O<+-DSD`#Qu#;B+!~~k9pf2tbBFE8K)Yw&s9u%Td5mhSDR}7-k(eCKDqQ_xFDpWIDruVc_3nfFzd6 zOC{W!uB`*R6t&jDwu?=Oi0dkpDcI?9EEQ3Tr?E*vpCc5+qQ