1

My question is pretty simple

I'm trying to call a function in my smart contract from ethers.js

I just need to set a variable of type "address" in my contract.

Code:

//solidity
function setTokenX(address _tokenX) public {
    tokenX = _tokenX;   
}
//js

tokenX = '0x3fdaf6c54eba05edebed44c4f986f49a5de55113';

await mycontract.setTokenX(tokenX);

It works a weird way for some reason. On Etherscan my variable is displayed as

0x361d47ce0000000000000000000000003fdaf6c54eba05edebed44c4f986f49a5de55113

While in the in javascript I send the parameter as a string. What's the catch? Should I encode it and then abi.decode in solidity? How to do this with ethers.js?

1 Answer 1

1

The contract should be working correctly.

The input look a little odd because it is encoded in the solidiy ABI.

0x361d47ce0000000000000000000000003fdaf6c54eba05edebed44c4f986f49a5de55113
  • 361d47ce The first four bytes is the function selector. It encodes the function to be called.
  • 0000000000000000000000003fdaf6c54eba05edebed44c4f986f49a5de55113 The next 32 bytes is the address parameter padded to with zeros.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.