Как преобразовать адрес, возвращенный из моего смарт-контракта, в читаемую строку? - PullRequest
0 голосов
/ 10 января 2019

У меня есть простая функция 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 голосов
/ 10 января 2019

Убедитесь, что ваша функция Solidity помечена как view. В противном случае стандартным поведением web3.js является отправка транзакции, и вы, вероятно, получаете хеш транзакции. (Транзакции не имеют возвращаемых значений.)

function getBookAccounts() public view returns (address) {

Если вы измените функцию на представление, web3.js должен сделать вызов вместо отправки транзакции. Это быстрее, не требует газа и может возвращать значение.

...