我想使用Gnosis的Multisig钱包,无论是来自网络应用程序(Next.js)还是移动应用程序()。为此,在后端使用安全核心SDK并使用它构建API似乎是一种很好的方法。因此,在做了一些研究之后,我发现了这个代码示例,它展示了OpenSea SDK在Node.js中的实现。这个例子基本上是由web3提供商使用炼金术/恩弗拉的S API密钥和用户钱包的助记符组成的。经过进一步的研究,我发现这个文章展示了组成web3提供者的多种方式。现在,我编写了一个简单的节点应用程序,并尝试了PrivateKeySubprovider和炼金术,但得到了一个错误。
简单的index.js文件:
const keythereum = require('keythereum') // library to recover users private key from keystore
const { Web3Adapter, SafeFactory } = require('@gnosis.pm/safe-core-sdk')
const PrivateKeyWalletSubprovider = require('@0x/subproviders').PrivateKeyWalletSubprovider // subproviders import
const RPCSubprovider = require('web3-provider-engine/subproviders/rpc') // subproviders import
const Web3ProviderEngine = require('web3-provider-engine') // library to compose the web3 provider
const Web3 = require('web3')
// Getting private key
let keyObject = "<keystore>"
keyObject = JSON.parse(keyObject)
let privateKey = keythereum.recover("<password>", keyObject)
privateKey = privateKey.toString('hex')
const WALLET_ADDRESS = "<wallet address>"
const ALCHEMY_KEY = "<alchemy API key>"
// subprovider to sign the transactions
const privateKeyWalletSubprovider = new PrivateKeyWalletSubprovider(privateKey)
// subprovider to query/read blockchain
const alchemyRpcSubprovider = new RPCSubprovider({ rpcUrl: ALCHEMY_KEY })
const providerEngine = new Web3ProviderEngine()
providerEngine.addProvider(privateKeyWalletSubprovider)
providerEngine.addProvider(alchemyRpcSubprovider)
providerEngine.start() // web3 provider created
const web3Adapter = new Web3Adapter({ web3: providerEngine, signerAddress: WALLET_ADDRESS })
async function deploySafe() {
try {
const safeFactory = await SafeFactory.create({ ethAdapter: web3Adapter }) // Error happening here
console.log('[safeFactory]: ', safeFactory)
const owners = [WALLET_ADDRESS]
const threshold = 1
const safeAccountConfig = { owners, threshold }
const safeSdk = await safeFactory.deploySafe(safeAccountConfig)
console.log('[safeSdk]: ', safeSdk)
} catch (err) {
console.log('[deploySafe-error]:', err)
}
}
deploySafe()错误:
[deploySafe-error]: TypeError: Cannot read properties of undefined (reading 'getChainId')
at Web3Adapter.getChainId (C:\Home\Dev\gnosis-venly\node_modules\@gnosis.pm\safe-core-sdk\src\ethereumLibs\Web3Adapter.ts:47:26)
at SafeFactory.init (C:\Home\Dev\gnosis-venly\node_modules\@gnosis.pm\safe-core-sdk\src\safeFactory\index.ts:76:44)
at Function.create (C:\Home\Dev\gnosis-venly\node_modules\@gnosis.pm\safe-core-sdk\src\safeFactory\index.ts:62:26)
at deploySafe (C:\Home\Dev\gnosis-venly\index.js:28:43)
at Object.<anonymous> (C:\Home\Dev\gnosis-venly\index.js:40:1)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47有人能帮助解决这个错误吗?同样,像这样使用安全SDK是正确的,还是在后端使用SDK的正确方式?
发布于 2022-01-02 19:11:07
web3-provider-engine是一个低级别的虚设提供程序,safe-core-sdk只支持内部使用此类提供程序的web3.js或ether.js提供程序。
https://ethereum.stackexchange.com/questions/117832
复制相似问题