如何将智能合约返回的地址转换为可读的字符串?

时间:2019-01-10 16:32:30

标签: javascript solidity web3 web3js

我有简单的get函数,它返回一个地址。在JS的前端,我想将此地址转换为某种可读功能,即字符串。

迁移合同后,我使用web3来使用该函数返回地址。但是,我在阅读它时遇到了麻烦。我希望避免将其转换为.sol文件中的字符串,以避免不必要的耗油量。

这是智能合约中的功能

function getBookAccounts() public returns(address){
   return bookAccount;
}

这是试图控制台记录地址的JS文件

async showAccounts() {
    const contract = require('truffle-contract')
    const simpleStorage = contract(SimpleStorageContract)
    simpleStorage.setProvider(this.state.web3.currentProvider)

    var currAccount = await this.simpleStorageInstance.getBookAccounts();

    console.log('The address is ', currAccount)
}

很遗憾,我无法打印此地址。我猜想我需要将其转换为字符串,而不是像实体版那样使用UTF8。

1 个答案:

答案 0 :(得分:2)

确保将Solidity功能标记为view。否则,web3.js的默认行为是发送事务,并且您可能会找回事务哈希。 (交易没有返回值。)

function getBookAccounts() public view returns (address) {

如果将功能更改为视图,则web3.js应该发出 call 而不是发送事务。这样速度更快,不需要耗油,并且可以返回值。