Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@_akira19

Solidityでブラウザからコントラクトの変数を取得する方法

More than 1 year has passed since last update.

web3.jsを通じてブラウザからブロックチェーン上の変数を取得するのに色々手間取ったので、書き残しておきます。

今回はstruct carの配列であるcarsから要素を取得したいと思います。(Solidity version 0.5以上です。)

sample1.sol
pragma solidity ^0.5.0;

contract sample1{
    struct car {
        string carName;
        string company;
    }

    car[] public cars;
}

Solidityではpublicな変数は自動的にgetterを定義してくれます。
なので、最初は下記の様にJavascriptで簡単にパッと取得出来ると思ってました。

app.js
function() {
    var productOwnershipInstance;
    App.contracts.sample1.deployed().then(function(instance) {
        sample1Instance = instance;
        console.log(sample1Instance.cars[0]); // undefinedが出力
      })
}

Solidity上だと上記の取得方法、つまりcars[0]だけでcars配列の最初の要素が取得できます。SolidityもJavascriptも似た様なもんだから似た様に扱えると思ってたのが間違いでした。実際はcarsというfunctionが生成され、かつPromiseが返ってくるので実際は下記の様になります。

app.js
function() {
var sample1Instance;
    App.contracts.sample1.deployed().then(function(instance) {
        sample1Instance = instance;
        sample1instance.cars(0).then(result => {
          console.log(result[0]); // carsの最初の要素のcarNameが出力される
          console.log(result[1]); // carsの最初の要素のcompanyが出力される
        });
    }
}

こんな感じで取得することになります。
もっと簡単な方法あったら教えてください。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
_akira19
Twitter: @_akira19
bajji
2019年創業のスタートアップ 。感情日記SNS『Feelyou(フィールユー)』、ブロックチェーンを活用したSNS『bajji(バッジ)』を開発しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?