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

Posted

技术标签:

【中文标题】如何将智能合约返回的地址转换为可读字符串?【英文标题】:How do I convert the address returned from my smart contract into a readable string? 【发布时间】:2019-06-05 13:58:21 【问题描述】:

我有一个返回地址的简单 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)

很遗憾,我无法打印此地址。我猜我需要将它转换为字符串,而不是像solidity中使用的UTF8。

【问题讨论】:

【参考方案1】:

确保您的 Solidity 函数被标记为 view。否则 web3.js 的默认行为是发送一个事务,你可能会得到一个事务哈希。 (交易没有返回值。)

function getBookAccounts() public view returns (address) 

如果您将函数更改为视图,web3.js 应该进行调用,而不是发送事务。这更快,不需要gas,并且可以返回一个值。

【讨论】:

是的,成功了。我不必像我想的那样将地址转换为字符串。

以上是关于如何将智能合约返回的地址转换为可读字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Web3js - 部署后立即返回智能合约地址

以太坊合约地址错误是怎么回事

智能合约将 eth 转移到地址失败

我们可以通过 Token Name 获取智能合约地址吗

使用 web3 js 调用智能合约函数

EOS 智能合约案例解析