質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Solidity

Solidityは、仮想通貨イーサリアム上で実行できるプログラミング言語。スマートコントラクトやDAppsなどの開発・実装に用いられます。コントラクト指向・高水準な言語のため、イーサリアム上で動作するEVM Codeに翻訳することが可能です。

Ethereum

Ethereum(イーサリアム)は、ビットコインに次いで時価総額が大きい仮想通貨もしくはそのブロックチェーン技術を指します。DApps やスマート・コントラクトの構築を目的としたプラットフォームであり、OSSで開発されています。

web3.js

web3.jsは、Ethereumのノードとローカルの通信を可能にできるJavaScript APIです。HTTPやIPCを使って通信を行い、gethを毎回起動せずにブラウザからコントラクトを実行できます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

受付中

DApps開発中のreactのエラーについて

sagi12
sagi12

総合スコア0

Solidity

Solidityは、仮想通貨イーサリアム上で実行できるプログラミング言語。スマートコントラクトやDAppsなどの開発・実装に用いられます。コントラクト指向・高水準な言語のため、イーサリアム上で動作するEVM Codeに翻訳することが可能です。

Ethereum

Ethereum(イーサリアム)は、ビットコインに次いで時価総額が大きい仮想通貨もしくはそのブロックチェーン技術を指します。DApps やスマート・コントラクトの構築を目的としたプラットフォームであり、OSSで開発されています。

web3.js

web3.jsは、Ethereumのノードとローカルの通信を可能にできるJavaScript APIです。HTTPやIPCを使って通信を行い、gethを毎回起動せずにブラウザからコントラクトを実行できます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0回答

0評価

0クリップ

4閲覧

投稿2020/10/25 06:30

前提・実現したいこと

ReactとSolidityを使ってDAppsを作っています。(アドレスを入力するとそのユーザーの情報が表示されるプログラムです)
ブラウザでReactの動作確認をする際にエラーが発生しています。
エラーはページ遷移するごとに一度だけ表示されます。
毎回リロードをすると正常に動くようになるのですがこの問題を解決したいです。

発生している問題・エラーメッセージ

エラーメッセージ Unhandled Rejection (TypeError): Cannot read property 'methods' of null // アカウント情報の読み込み 48 | viewRecord = async () => { 49 | const { contract, address } = this.state; > 50 | const result1 = await contract.methods.viewAccount(address).call(); | ^ 51 | const result2 = await contract.methods.viewAccount_Transaction(address).call(); 52 | console.log(result1); 53 | console.log(result2);

該当のソースコード

react

class Info extends React.Component { constructor(props) { super(props); this.state = { web3: null, accounts: null, contract: null, name: null, email: null, address: "", outputName: null, outputEmail: null, outputNumTransactions: 0, outputReputations: 0, outputNumSell: 0, outputNumBuy: 0, }; } componentDidMount = async () => { try { const web3 = await getWeb3(); const accounts = await web3.eth.getAccounts(); const networkId = await web3.eth.net.getId(); const deployedNetwork = MarketApp.networks[networkId]; const instance = new web3.eth.Contract( MarketApp.abi, deployedNetwork && deployedNetwork.address ); this.setState({ web3, accounts, contract: instance }); } catch (error) { alert( `Failed to load web3, accounts, or contract. Check console for details.` ); console.error(error); } }; // アカウント情報の読み込み viewRecord = async () => { const { contract, address } = this.state; const result1 = await contract.methods.viewAccount(address).call(); const result2 = await contract.methods.viewAccount_Transaction(address).call(); console.log(result1); console.log(result2); const outputName = result1[0]; const outputEmail = result1[1]; const outputNumTransactions = result2[0]; const outputReputations = result2[1]; const outputNumSell = result2[2]; const outputNumBuy = result2[3]; this.setState({ outputName, outputEmail }); this.setState({ outputNumTransactions, outputReputations, outputNumSell, outputNumBuy }); }; handleChange = (name) => (event) => { this.setState({ [name]: event.target.value }); }; render() { return ( <div className="Info"> <input onChange={this.handleChange("address")} placeholder="addressを入力" /> <button onClick={this.viewRecord}>閲覧</button> <br /> <br /> {this.state.outputName ? <p>Name: {this.state.outputName}</p> : <p></p>} {this.state.outputEmail ? ( <p>Email: {this.state.outputEmail}</p> ) : ( <p></p> )} {this.state.outputNumTransactions ? <p>取引回数: {this.state.outputNumTransactions}</p> : <p></p>} {this.state.outputReputations ? <p>評価: {this.state.outputReputations}</p> : <p></p>} {this.state.outputNumSell ? <p>出品回数: {this.state.outputNumSell}</p> : <p></p>} {this.state.outputNumBuy ? <p>購入回数: {this.state.outputNumBuy}</p> : <p></p>} </div> ); } } export default Info;

solidity

struct account { string name; //名前 string email; //Emailアドレス uint256 numTransactions; //取引回数 int256 reputations; //取引評価、大きい値ほど良いアカウント bool resistered; //アカウント未登録:false, 登録済み:true int256 numSell; //出品した商品の数 int256 numBuy; //購入した商品の数 } address[] public users; // ユーザーのアドレス mapping(address => account) accounts; // アカウント情報(個人情報) function viewAccount(address user) public view returns (string memory, string memory) { string memory _name = accounts[user].name; string memory _email = accounts[user].email; return (_name, _email); } // アカウント情報(取引) function viewAccount_Transaction(address user) public view returns ( uint256, int256, int256, int256 ) { uint256 _numTransactions = accounts[user].numTransactions; int256 _reputations = accounts[user].reputations; int256 _numSell = accounts[user].numSell; int256 _numBuy = accounts[user].numBuy; return (_numTransactions, _reputations, _numSell, _numBuy); }

補足情報(FW/ツールのバージョンなど)

Truffle v5.1.37 (core: 5.1.37)
Solidity - 0.5.2 (solc-js)
Node v14.2.0
Web3.js v1.2.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Solidity

Solidityは、仮想通貨イーサリアム上で実行できるプログラミング言語。スマートコントラクトやDAppsなどの開発・実装に用いられます。コントラクト指向・高水準な言語のため、イーサリアム上で動作するEVM Codeに翻訳することが可能です。

Ethereum

Ethereum(イーサリアム)は、ビットコインに次いで時価総額が大きい仮想通貨もしくはそのブロックチェーン技術を指します。DApps やスマート・コントラクトの構築を目的としたプラットフォームであり、OSSで開発されています。

web3.js

web3.jsは、Ethereumのノードとローカルの通信を可能にできるJavaScript APIです。HTTPやIPCを使って通信を行い、gethを毎回起動せずにブラウザからコントラクトを実行できます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。