首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在后端使用安全核心SDK (Node.js)?

如何在后端使用安全核心SDK (Node.js)?
EN

Ethereum用户
提问于 2022-01-02 17:37:49
回答 1查看 494关注 0票数 2

我想使用Gnosis的Multisig钱包,无论是来自网络应用程序(Next.js)还是移动应用程序()。为此,在后端使用安全核心SDK并使用它构建API似乎是一种很好的方法。因此,在做了一些研究之后,我发现了这个代码示例,它展示了OpenSea SDK在Node.js中的实现。这个例子基本上是由web3提供商使用炼金术/恩弗拉的S API密钥和用户钱包的助记符组成的。经过进一步的研究,我发现这个文章展示了组成web3提供者的多种方式。现在,我编写了一个简单的节点应用程序,并尝试了PrivateKeySubprovider和炼金术,但得到了一个错误。

简单的index.js文件:

代码语言:javascript
复制
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()

错误:

代码语言:javascript
复制
[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的正确方式?

EN

回答 1

Ethereum用户

发布于 2022-01-02 19:11:07

web3-provider-engine是一个低级别的虚设提供程序,safe-core-sdk只支持内部使用此类提供程序的web3.jsether.js提供程序。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/117832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档