Gnosis Safe – Fixing ‘Unprocessable Entity’ Error When Calling ‘safeService.proposeTransaction()’

gnosisgnosis-safe

While proposing a transaction to the safe service, I am getting below error:

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)

I am creating and proposing the transaction in the backend with below code:

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

All the input seems fine to me as I console them before calling the proposeTransaction :

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'

Error is less helpful as it is not giving much information. I was not facing such errors while using the safe SDKs in the frontend.

Version:

@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

Best Answer

Ok the issue is resolved. The reason was that the to field in the transaction is not checksumed:

const transaction = {
  to: '0xb0968a944aF335f0f73900821a52d0066593aC5a',
  data: '0x',
  value: '1000000000000000',
}

I checksumed the address and it worked:

transaction.to = ethers.utils.getAddress(transaction.to)

I think the SDK should handle this as I was not getting this issue while using the SDKs in the frontend and even nothing is mentioned about this in the guide

Related Topic