BlockChain>Truffle2
20180 ワード
Truffle
Reactによるインテリジェント契約
配布された契約内容を取得する場合はweb 3を使用します.
getWeb3
1.web 3にmetamaskを接続する方法
client>src>getWeb3.js
松露は見てやります 2.作業
App.js
まず画面を変えましょう
https://www.npmjs.com/package/@truffle/contract
コンソールウィンドウの内容
Reactによるインテリジェント契約
配布された契約内容を取得する場合はweb 3を使用します.
getWeb3
1.web 3にmetamaskを接続する方法
GanacheはMetamaskとwindowを開きますethereum
window.ethereum->meta maskがあるかどうかを尋ねる
松露は見てやります
2.作業
2-1. はんのうパッド
$ npx truffle unbox react
2-2. truffle-config.js設定の変更
2-3. Contractの作成
$ npx truffle create contract [파일명]
$ npx truffle migrate
注入されたweb 3(メタマスクに関連付けられたweb 3)npx truffle create FruitShop
npx truffle create migration Fruitshop
フレームワークは後発のショーなので、バージョンはいつも遅いです.
だから
エラーが発生した場合は、// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
//1. 보낸 사람의 계정주소에서 사과를 총 몇개 가지고 있는가.
//2. 사과를 구매했을 시, 해당 계정주소에 사과를 추가해주는 코드를 작성
//3. 사과를 판매시 내가 가지고 있는 (사과 * 사과구매가격)만큼 토큰을 반환해주고, 사과를 0개로 바꿔준다.
contract Fruitshop {
//사과를 몇개 가지고 있는가.
mapping(address=>uint) myApple;
constructor() public {
}
function buyApple() public {
myApple[msg.sender]++;
//msg.sender요청한 사람의 주소값이 들어가있음
}
function sellApple(uint _applePrice) payable public {
uint tatalPrice = myApple[msg.sender]*_applePrice;
myApple[msg.sender] = 0;
msg.sender.transfer(tatalPrice);//환불에 가깝다//얘는 비쥬얼스튜디오가 8이고 트러플은 5여서 문제가 일어나는 것임
}
function getMyApple() public view returns(uint){
return myApple[msg.sender];
}
}
//truffle --version
シンプルなストレージになりました.jsonは存在しません.
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
//1. 보낸 사람의 계정주소에서 사과를 총 몇개 가지고 있는가.
//2. 사과를 구매했을 시, 해당 계정주소에 사과를 추가해주는 코드를 작성
//3. 사과를 판매시 내가 가지고 있는 (사과 * 사과구매가격)만큼 토큰을 반환해주고, 사과를 0개로 바꿔준다.
contract Fruitshop {
//사과를 몇개 가지고 있는가.
mapping(address=>uint) myApple;
constructor() public {
}
function buyApple() public {
myApple[msg.sender]++;
//msg.sender요청한 사람의 주소값이 들어가있음
}
function sellApple(uint _applePrice) payable public {
uint tatalPrice = myApple[msg.sender]*_applePrice;
myApple[msg.sender] = 0;
msg.sender.transfer(tatalPrice);//환불에 가깝다//얘는 비쥬얼스튜디오가 8이고 트러플은 5여서 문제가 일어나는 것임
}
function getMyApple() public view returns(uint){
return myApple[msg.sender];
}
}
//truffle --version
import React, { Component } from "react";
import FruitshopContract from "./contracts/Fruitshop.json";
import getWeb3 from "./getWeb3";
import "./App.css";
const App=()=>{
return(
<div>
<h1>사과 가격 10 ETH</h1>
<button>구매하기</button>
<p>내가 가진 사과 : <span>0</span></p>
<button>Sell</button>
<p>판매가격 : {0*10} ETH</p>
</div>
)
}
export default App;
まず画面を変えましょう
import React, { useState } from "react";
import FruitshopContract from "./contracts/Fruitshop.json";
import getWeb3 from "./getWeb3";
import "./App.css";
const App=()=>{
const [myApple,setMyApple]= useState(0);
const buyApple = () =>{
// setMyApple(w=>w+1);
setMyApple(prev=>prev+1);
}
const sellApple = ()=>{
setMyApple(prev=>0);
}
return(
<div>
<h1>사과 가격 10 ETH</h1>
<button onClick={()=>buyApple()}>구매하기</button>
<p>내가 가진 사과 : <span>{myApple}</span></p>
<button onClick={()=>sellApple()}>Sell</button>
<p>판매가격 : {myApple*10} ETH</p>
</div>
)
}
export default App;
import React, { useState , useEffect} from "react";
import FruitshopContract from "./contracts/Fruitshop.json";
import getWeb3 from "./getWeb3";
import "./App.css";
const App=()=>{
const [myApple,setMyApple]= useState(0);
const buyApple = () =>{
// setMyApple(w=>w+1);
setMyApple(prev=>prev+1);
}
const sellApple = ()=>{
setMyApple(prev=>0);
}
const getweb= async ()=>{
let web3 = await getWeb3()
console.log(web3)
}
//componentDidMount WEB3 가져와서 메타마스크 연결
useEffect(()=>{
getweb()
},[])
return(
<div>
<h1>사과 가격 10 ETH</h1>
<button onClick={()=>buyApple()}>구매하기</button>
<p>내가 가진 사과 : <span>{myApple}</span></p>
<button onClick={()=>sellApple()}>Sell</button>
<p>판매가격 : {myApple*10} ETH</p>
</div>
)
}
export default App;
@truffle/contracthttps://www.npmjs.com/package/@truffle/contract
$ npm i @truffle/contract
import React, { useState , useEffect} from "react";
import FruitshopContract from "./contracts/Fruitshop.json";
import getWeb3 from "./getWeb3";
import "./App.css";
const App=()=>{
const [myApple,setMyApple]= useState(0);
const buyApple = () =>{
// setMyApple(w=>w+1);
setMyApple(prev=>prev+1);
}
const sellApple = ()=>{
setMyApple(prev=>0);
}
const getweb= async ()=>{
var contract = require("@truffle/contract");
let web3 = await getWeb3()
console.log(web3);
let fruitshop= contract(FruitshopContract);
fruitshop.setProvider(web3.currentProvider);//여기가 votingcontract부분까지임
let instance = await fruitshop.deployed();
console.log('instance');
console.log(instance);
}
//componentDidMount WEB3 가져와서 메타마스크 연결
useEffect(()=>{
getweb()
},[])
return(
<div>
<h1>사과 가격 10 ETH</h1>
<button onClick={()=>buyApple()}>구매하기</button>
<p>내가 가진 사과 : <span>{myApple}</span></p>
<button onClick={()=>sellApple()}>Sell</button>
<p>판매가격 : {myApple*10} ETH</p>
</div>
)
}
export default App;
import React, { useState , useEffect} from "react";
import FruitshopContract from "./contracts/Fruitshop.json";
import getWeb3 from "./getWeb3";
import "./App.css";
const App=()=>{
const [myApple,setMyApple]= useState(0);
const buyApple = () =>{
// setMyApple(w=>w+1);
setMyApple(prev=>prev+1);
}
const sellApple = ()=>{
setMyApple(prev=>0);
}
const getweb= async ()=>{
var contract = require("@truffle/contract");
let web3 = await getWeb3()
// console.log(web3);
let fruitshop= contract(FruitshopContract);
fruitshop.setProvider(web3.currentProvider);//여기가 votingcontract부분까지임
let instance = await fruitshop.deployed();
// console.log('instance');
// console.log(instance);
//주소 가져오기
let accounts = await web3.eth.getAccounts();
console.log(accounts);
}
//componentDidMount WEB3 가져와서 메타마스크 연결
useEffect(()=>{
getweb()
},[])
return(
<div>
<h1>사과 가격 10 ETH</h1>
<button onClick={()=>buyApple()}>구매하기</button>
<p>내가 가진 사과 : <span>{myApple}</span></p>
<button onClick={()=>sellApple()}>Sell</button>
<p>판매가격 : {myApple*10} ETH</p>
</div>
)
}
export default App;
コンソールウィンドウの内容
0x6CD05f300EFAc403C05a660236dDC958C78410aF
メタマスクの内容0x6CD05f300EFAc403C05a660236dDC958C78410aF
同じように表示されます.メタマスクの内容はweb 3から持参したものです.Reference
この問題について(BlockChain>Truffle2), 我々は、より多くの情報をここで見つけました https://velog.io/@nara7875/BlockChainTruffle2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol