首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调用'safeService.proposeTransaction()‘时获取“错误:不可处理的实体”

在调用'safeService.proposeTransaction()‘时获取“错误:不可处理的实体”
EN

Ethereum用户
提问于 2022-02-02 06:52:56
回答 1查看 210关注 0票数 2

在向安全服务提出事务时,我得到的错误如下:

代码语言:javascript
复制
Error: Unprocessable Entity
    at sendRequest (C:\Home\Mesha\mesha-be\node_modules\@gnosis.pm\safe-service-client\src\utils\httpRequests.ts:52:9)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

我使用下面的代码在后端创建和提议事务:

代码语言:javascript
复制
import SafeServiceClient from "@gnosis.pm/safe-service-client";
const safeService = new SafeServiceClient('https://safe-transaction.rinkeby.gnosis.io');
import Safe, { EthersAdapter } from "@gnosis.pm/safe-core-sdk";
import { ethers } from "ethers";
const HDWalletProvider = require("@truffle/hdwallet-provider");

// Creating web3 provider
const walletProvider = new HDWalletProvider({
  privateKeys: [privateKey], 
  providerOrUrl: ALCHEMY_KEY,
});

const provider = new ethers.providers.Web3Provider(walletProvider);

// Initializing safe-core sdk
const signer: any = provider.getSigner(0);

const ethAdapter = new EthersAdapter({
  ethers,
  signer,
});

const safeSdk: Safe = await Safe.create({ ethAdapter, safeAddress }); // safeAddress: '0x0A3dAaa3AEbd9A832b87FC94F1aBc15a9e4ed6F5', Rinkeby

const transaction = {
  to: '0xb0968a944aF335f0f73900821a52d0066593aC5a',
  data: '0x',
  value: '1000000000000000',
}
transaction.nonce = await safeService.getNextNonce(safeAddress);
const safeTransaction = await safeSdk.createTransaction(transaction);
await safeSdk.signTransaction(safeTransaction);
const safeTxHash = await safeSdk.getTransactionHash(safeTransaction);
await safeService.proposeTransaction({
  safeAddress,
  safeTransaction,
  safeTxHash,
  senderAddress,
}); // Here I am getting the error

在调用proposeTransaction之前,当我安慰它们时,所有的输入对我来说似乎都很好:

代码语言:javascript
复制
safeAddress: '0x0A3dAaa3AEbd9A832b87FC94F1aBc15a9e4ed6F5'
safeTransaction: EthSafeTransaction {
  signatures: Map {
    '0xb0968a944af335f0f73900821a52d0066593ac5a' => EthSignSignature {
      signer: '0xb0968a944aF335f0f73900821a52d0066593aC5a',
      data: '0xc6eb0fed77c6c6bf3891aa06f6620b0cc53a4646633dfd3148d16868fa45c58d53cdb1359ceabdaddab2cf37e8ca1997ab19669776b75
    }
  },
  data: {
    to: '0xb0968a944af335f0f73900821a52d0066593ac5a',
    value: '1000000000000000',
    data: '0x',
    operation: 0,
    baseGas: 0,
    gasPrice: 0,
    gasToken: '0x0000000000000000000000000000000000000000',
    refundReceiver: '0x0000000000000000000000000000000000000000',
    nonce: 0,
    safeTxGas: 0
  }
}
safeTxHash: '0x0954a44ef78e4a0cdeabbafb196dd2ab7ee531739c3ecd58636804571fd868ab'
senderAddress: '0xb0968a944aF335f0f73900821a52d0066593aC5a'

错误不太有用,因为它没有提供多少信息。在前面使用安全SDK时,我没有遇到这样的错误。

版本:

代码语言:javascript
复制
@gnosis.pm/safe-core-sdk: v1.3.0
@gnosis.pm/safe-service-client: v1.1.1
node: v12.17.0
@truffle/hdwallet-provider: v2.0.0
ethers: v5.5.3
EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-02-02 07:59:35

好的,问题解决了。原因是事务中的to字段未被校验:

代码语言:javascript
复制
const transaction = {
  to: '0xb0968a944aF335f0f73900821a52d0066593aC5a',
  data: '0x',
  value: '1000000000000000',
}

我核对了地址,它起作用了:

代码语言:javascript
复制
transaction.to = ethers.utils.getAddress(transaction.to)

我认为SDK应该处理这个问题,因为我在前端使用SDK时没有得到这个问题,而且在指南中甚至没有提到这一点。

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

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

复制
相关文章

相似问题

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