VWBL / VWBL-SDK

VWBL SDK for JavaScript in the browser and Node.js
https://docs.vwbl-protocol.org/
Apache License 2.0
14 stars 3 forks source link

Mint NFT fail in Japan Open Chain Testnet #155

Closed 0xcuonghx closed 2 months ago

0xcuonghx commented 2 months ago

Hi, I'm a Japan Open Chain member. I try to integrate the protocol but see the error.

Behavior

  1. I've already deployed the contract on Japan Open Chain Testnet by following

    • https://github.com/VWBL/VWBL-protocol
      ➜  VWBL-protocol git:(master) ✗ yarn deploy:joc_testnet
      yarn run v1.22.22
      $ env-cmd -f ./config/.env.joc_testnet hardhat run --network joc_testnet scripts/deploy.ts
      VWBL Metadata URL:
      Message to be signed:  Hello VWBL
      VWBLERC721 Contract deployed to: 0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3
  2. I try this SDK and error come below

    
    const {
    VWBL,
    ManageKeyType,
    UploadContentType,
    UploadMetadataType,
    } = require("vwbl-sdk");

const { ethers } = require("ethers"); const FileAPI = require("file-api"); const File = FileAPI.File;

const privateKey = "xxx"; const ethProvider = new ethers.providers.JsonRpcProvider( "https://rpc-1.testnet.japanopenchain.org:8545" ); const ethSigner = new ethers.Wallet(privateKey, ethProvider);

const vwbl = new VWBL({ ipfsConfig: { apiKey: "xx", // pinata API Key apiSecret: "xxx", // pinata SecretAPI Key }, awsConfig: undefined, contractAddress: "0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3", // VWBL nft's contract address manageKeyType: ManageKeyType.VWBL_NETWORK_SERVER, uploadContentType: UploadContentType.IPFS, uploadMetadataType: UploadMetadataType.IPFS, vwblNetworkUrl: "https://dev.vwbl.network/", ethersProvider: ethProvider, ethersSigner: ethSigner, });

async function main() { await vwbl.sign();

const tokenId = await vwbl.managedCreateTokenForIPFS( "test token", "test", "/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/image.jpeg", "/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/thumnail.png", 10, "base64" );

console.log(tokenId); }

main();


## Error

➜ VWBL-test node index.js signed encrypt data upload data upload meta data transaction start /Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:238 var error = new Error(message); ^

<ref *1> Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (error={"reason":"execution reverted","code":"UNPREDICTABLE_GAS_LIMIT","method":"estimateGas","transaction":{"from":"0xBac8ECdbc45A50d3bda7246bB2AA64Fc449C7924","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"maxFeePerGas":{"type":"BigNumber","hex":"0x59682f0e"},"to":"0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3","value":{"type":"BigNumber","hex":"0x00"},"data":"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000","type":2,"accessList":null},"error":{"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":52,\"error\":{\"code\":-32000,\"message\":\"execution reverted\"}}\n","error":{"code":-32000},"requestBody":"{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0x59682f0e\",\"maxPriorityFeePerGas\":\"0x59682f00\",\"value\":\"0x0\",\"from\":\"0xbac8ecdbc45a50d3bda7246bb2aa64fc449c7924\",\"to\":\"0x6a8694b2ec1861784d2bbc89ae08ad2badef74e3\",\"data\":\"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000\"}],\"id\":52,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"https://rpc-1.testnet.japanopenchain.org:8545"}}, tx={"data":"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000","to":{},"from":"0xBac8ECdbc45A50d3bda7246bB2AA64Fc449C7924","value":{"type":"BigNumber","hex":"0x00"},"type":2,"maxFeePerGas":{"type":"BigNumber","hex":"0x59682f0e"},"maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"nonce":{},"gasLimit":{},"chainId":{}}, code=UNPREDICTABLE_GAS_LIMIT, version=abstract-signer/5.7.0) at Logger.makeError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:238:21) at Logger.throwError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:247:20) at /Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/abstract-signer/lib/index.js:365:47 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Promise.all (index 8) { reason: 'cannot estimate gas; transaction may fail or may require manual gas limit', code: 'UNPREDICTABLE_GAS_LIMIT', error: Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="execution reverted", method="estimateGas", transaction={"from":"0xBac8ECdbc45A50d3bda7246bB2AA64Fc449C7924","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"maxFeePerGas":{"type":"BigNumber","hex":"0x59682f0e"},"to":"0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3","value":{"type":"BigNumber","hex":"0x00"},"data":"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000","type":2,"accessList":null}, error={"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":52,\"error\":{\"code\":-32000,\"message\":\"execution reverted\"}}\n","error":{"code":-32000},"requestBody":"{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0x59682f0e\",\"maxPriorityFeePerGas\":\"0x59682f00\",\"value\":\"0x0\",\"from\":\"0xbac8ecdbc45a50d3bda7246bb2aa64fc449c7924\",\"to\":\"0x6a8694b2ec1861784d2bbc89ae08ad2badef74e3\",\"data\":\"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000\"}],\"id\":52,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"https://rpc-1.testnet.japanopenchain.org:8545"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) at Logger.makeError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:238:21) at Logger.throwError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:247:20) at checkError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:122:20) at JsonRpcProvider. (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:751:47) at step (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) at Object.throw (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) at rejected (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { reason: 'execution reverted', code: 'UNPREDICTABLE_GAS_LIMIT', method: 'estimateGas', transaction: { from: '0xBac8ECdbc45A50d3bda7246bB2AA64Fc449C7924', maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true }, maxFeePerGas: BigNumber { _hex: '0x59682f0e', _isBigNumber: true }, to: '0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3', value: BigNumber { _hex: '0x00', _isBigNumber: true }, data: '0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000', type: 2, accessList: null }, error: Error: processing response error (body="{\"jsonrpc\":\"2.0\",\"id\":52,\"error\":{\"code\":-32000,\"message\":\"execution reverted\"}}\n", error={"code":-32000}, requestBody="{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0x59682f0e\",\"maxPriorityFeePerGas\":\"0x59682f00\",\"value\":\"0x0\",\"from\":\"0xbac8ecdbc45a50d3bda7246bb2aa64fc449c7924\",\"to\":\"0x6a8694b2ec1861784d2bbc89ae08ad2badef74e3\",\"data\":\"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000\"}],\"id\":52,\"jsonrpc\":\"2.0\"}", requestMethod="POST", url="https://rpc-1.testnet.japanopenchain.org:8545", code=SERVER_ERROR, version=web/5.7.1) at Logger.makeError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:238:21) at Logger.throwError (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/logger/lib/index.js:247:20) at /Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:313:32 at step (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:33:23) at Object.next (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:14:53) at fulfilled (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:5:58) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { reason: 'processing response error', code: 'SERVER_ERROR', body: '{"jsonrpc":"2.0","id":52,"error":{"code":-32000,"message":"execution reverted"}}\n', error: Error: execution reverted at getResult (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:191:21) at processJsonFunc (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:356:22) at /Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:288:46 at step (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:33:23) at Object.next (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:14:53) at fulfilled (/Users/cuonghx/Documents/repositories/gu-tech/VWBL/VWBL-test/node_modules/@ethersproject/web/lib/index.js:5:58) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { code: -32000, data: undefined }, requestBody: '{"method":"eth_estimateGas","params":[{"type":"0x2","maxFeePerGas":"0x59682f0e","maxPriorityFeePerGas":"0x59682f00","value":"0x0","from":"0xbac8ecdbc45a50d3bda7246bb2aa64fc449c7924","to":"0x6a8694b2ec1861784d2bbc89ae08ad2badef74e3","data":"0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000"}],"id":52,"jsonrpc":"2.0"}', requestMethod: 'POST', url: 'https://rpc-1.testnet.japanopenchain.org:8545' } }, tx: { data: '0x4d96f2c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a235e060ffe6edd9aabf1919e2303f22df597f9180dfd60836b3dc35bc247503f000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d58314b517672574a796e684c617531705a48695277474448565548646d417a56743162573438385431315a6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f6465762e7677626c2e6e6574776f726b2f00000000000000', to: Promise { '0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3' }, from: '0xBac8ECdbc45A50d3bda7246bB2AA64Fc449C7924', value: BigNumber { _hex: '0x00', _isBigNumber: true }, type: 2, maxFeePerGas: BigNumber { _hex: '0x59682f0e', _isBigNumber: true }, maxPriorityFeePerGas: BigNumber { _hex: '0x59682f00', _isBigNumber: true }, nonce: Promise { 394 }, gasLimit: Promise { [Circular *1] }, chainId: Promise { 10081 } } }

Node.js v20.12.2


Note that: Error is same when I try with https://github.com/VWBL/VWBL-Tutorial-App
Thank you for checking my issues.
thashimoto1998 commented 2 months ago

The VWBL NFT contract is divided into two contracts: one for uploading metadata to AWS S3 and one for uploading to IPFS. AWS S3 pattern: contract, deploy script IPFS pattern: contract, deploy script

The above code causes an error because run mint with IPFS metadata interface to VWBL NFT contract of S3 metadata. Please try again with an NFT contract of IPFS pattern. You can use the following nft contract address. joc testnet 0x3edb9d043d199211742eF8EEfeb3a9A2d399e026 joc mainnet 0x30B8a4E4810AB61e45F1bAAcbE6b6fb122EbD96e

Also, when running tx with metamask, the gas settings are done on the metamask side, but when running with nodejs, you need to explicitly set the gas settings. Below like.

const gasSettings = {
    maxPriorityFeePerGas:107 * (10**9),
    maxFeePerGas:107 * (10**9),
  }
  const tokenId = await vwbl.managedCreateTokenForIPFS(
    "test token",
    "test",
    "/Users/unimal/Desktop/untitled folder/node/asset/plain.png",
    "/Users/unimal/Desktop/untitled folder/node/asset/thumbnail.png",
    10,
    "base64",
    undefined,
    undefined,
    undefined,
    undefined,
    gasSettings
  );

Sample code: mint VWBL NFT

const {
  VWBL,
  ManageKeyType,
  UploadContentType,
  UploadMetadataType,
  GasSettings,
} = require("vwbl-sdk");

const { ethers } = require("ethers");
const FileAPI = require("file-api");
const MyFile = FileAPI.File;

require("dotenv").config();

const privateKey = process.env.KEY;
const ethProvider = new ethers.providers.JsonRpcProvider(
  "https://rpc-1.testnet.japanopenchain.org:8545/"
);

const ethSigner = new ethers.Wallet(privateKey, ethProvider);

const vwbl = new VWBL({
  ipfsConfig: {
    apiKey: "", // pinata API Key
    apiSecret:
      "", // pinata SecretAPI Key
  },
  awsConfig: undefined,
  contractAddress: "0x3edb9d043d199211742eF8EEfeb3a9A2d399e026", // VWBL nft's contract address
  // contractAddress: "0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3", // VWBL nft's contract address
  manageKeyType: ManageKeyType.VWBL_NETWORK_SERVER,
  uploadContentType: UploadContentType.IPFS,
  uploadMetadataType: UploadMetadataType.IPFS,
  vwblNetworkUrl: "https://dev.vwbl.network/",
  ethersProvider: ethProvider,
  ethersSigner: ethSigner,
});

async function test() {
  await vwbl.sign();

  const gasSettings = {
    maxPriorityFeePerGas:107 * (10**9),
    maxFeePerGas:107 * (10**9),
  }
  const tokenId = await vwbl.managedCreateTokenForIPFS(
    "test token",
    "test",
    "/Users/unimal/Desktop/untitled folder/node/asset/plain.png",
    "/Users/unimal/Desktop/untitled folder/node/asset/thumbnail.png",
    10,
    "base64",
    undefined,
    undefined,
    undefined,
    undefined,
    gasSettings
  );

  console.log(tokenId);
}

test();

decrypt VWBL NFT


require("dotenv").config();

const {
  VWBL,
  ManageKeyType,
  UploadContentType,
  UploadMetadataType,
  GasSettings,
} = require("vwbl-sdk");

const { ethers } = require("ethers");

const privateKey = process.env.KEY;
const ethProvider = new ethers.providers.JsonRpcProvider(
  "https://rpc-1.testnet.japanopenchain.org:8545/"
);

const ethSigner = new ethers.Wallet(privateKey, ethProvider);

const vwbl = new VWBL({
  ipfsConfig: {
    apiKey: "...", // pinata API Key
    apiSecret:
      "...", // pinata SecretAPI Key
  },
  awsConfig: undefined,
  contractAddress: "0x3edb9d043d199211742eF8EEfeb3a9A2d399e026", // VWBL nft's contract address
  // contractAddress: "0x6A8694B2ec1861784d2BBc89ae08AD2BADeF74E3", // VWBL nft's contract address
  manageKeyType: ManageKeyType.VWBL_NETWORK_SERVER,
  uploadContentType: UploadContentType.IPFS,
  uploadMetadataType: UploadMetadataType.IPFS,
  vwblNetworkUrl: "https://dev.vwbl.network/",
  ethersProvider: ethProvider,
  ethersSigner: ethSigner,
});

async function decrypt() {
    await vwbl.sign();
    const decryptedContent = await vwbl.getTokenById(2);
    console.log(decryptedContent);
}

decrypt();
0xcuonghx commented 2 months ago

LGTM