我有简单的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。
答案 0 :(得分:2)
确保将Solidity功能标记为view
。否则,web3.js的默认行为是发送事务,并且您可能会找回事务哈希。 (交易没有返回值。)
function getBookAccounts() public view returns (address) {
如果将功能更改为视图,则web3.js应该发出 call 而不是发送事务。这样速度更快,不需要耗油,并且可以返回值。