2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Hic est commercium inter navigatrum et contractum captiosum
Duae bibliothecae
Web3
Tuber contractus // tuber simpliciter involvit contractum ante-finem in nexu, quo facilius utetur.
venireagere projectin radice presul (in cap. 1);
Recreare agere project hic
https://blog.csdn.net/u012118993/article/details/87288516
reactCreate novum projectUse creat-react-app ut cito creare reagere project
(1)npm install -g create-react-app
Global institutionem (instituo toti)
(2)create-react-app reactproject
Novam agere incepto et nominare (nota: nomen non potest habere caput litterae)
(3)cd reactproject
Ingredi per imperium folder currere et parare consilium
(4)npm start
Curre ad project
E:trufflewoniu-pet-shop
Creavit tuber Directory
Sequenti install project in repeciare files
Install web3 (install ut folder infra)
npm install web3 --save
Tum install contractus tuber-
npm install truffle-contract --save
Demo complebitur
1. Link contractus
2. Judicium internum contractus
3. Add ant.design ui bibliotheca firmamentum
4. Complete in project
note novum
Contents in App.js
ut sequitur
import React from 'react'
import Web3 from 'web3'
import TruffleContract from 'truffle-contract'
import AdoptionJson from './truffle/build/contracts/Adoption.json' //引入前面智能合约编译好得到的json文件
class App extends React.Component{
constructor(props){
super(props)
this.web3 = null
this.Adoption = null
this.init()
this.state = {
//name:'woniu'
}
}
init(){
//如果网页中的web3不是undefined
if(typeof window.web3 != 'undefined'){
}
}
render(){
return <button></button>//hello,{this.state.name}
}
}
export default App
Si metamask obturaculum-in installatur in pasco
Global variabiles valores in navigatro habent
Metamask manually vel automatice coniungi potest
Initium scriptionis
Incipit petshop ab agere consilium
Npm start
In aperto pasco
http://localhost:3000/.
video effectus
Video install novus packages
Errorem accepi, quia munus initum non servatum est.
Effectus actualis post victoriam talis est;
nuper joined
init(){
//如果网页中的web3不是undefined
if(typeof window.web3 != 'undefined'){
this.web3Provider = window.web3.currentProvider; //metamask内置了web3的实例,实际可以手动链接
}else{
alert('请按照metamask')
}
}
Salvo codice mutato, retiaculum iterum accessere sine occlusione ac re-npm initio
Refice eam nunc
Utique nulla fenestra pop-up hoc tempore erit fenestra pop-up deleta pera metamask.
Hoc tempore utere navigatro Chrome sine pera ad accessum
Fenestella pop-sursum apparet, sed quaedam notae fucatae sunt.
Adde codice iterum
Omnes codices sic sunt
import React from 'react'
import Web3 from 'web3'
import TruffleContract from 'truffle-contract'
import AdoptionJson from './truffle/build/contracts/Adoption.json' //引入前面智能合约编译好得到的json文件
//1.链接合约
//2.执行一下合约内部函数
//3.添加ant.design ui库支持
//4.完成项目
class App extends React.Component{
constructor(props){
super(props)
this.web3 = null
this.Adoption = null
this.init()
this.state = {
//name:'woniu'
}
}
init(){
//如果网页中的web3不是undefined
if(typeof window.web3 != 'undefined'){
this.web3Provider = window.web3.currentProvider; //metamask内置了web3的实例,实际可以手动链接
}else{
alert('please install metamask')
}
this.web3 = new Web3(this.web3Provider) //将我们的this.web3Provider装载进来
this.initAdoption()
}
initAdoption(){
this.Adoption = TruffleContract(AdoptionJson) //使用TruffleContract传入编译后的合约,然后创建实例,可以调用合约内部函数
this.Adoption.setProvider(this.web3Provider) //设置来源,链接合约
return this.markAdopted()
}
//部署,这个是异步的,使用this.Adoption.deployed().then()也可以,这里用
//this.markAdopted(){
//部署链接一下
// const adoptionInstance = this.Adoption.deployed().then()
//}
async markAdopted(){
//部署链接一下
//await同步方式获取异步数据
const adoptionInstance = await this.Adoption.deployed() //部署,这个是异步的,使用this.Adoption.deployed().then()也可以,这里用
//调用合约内部函数getAdopters
const adopters = await adoptionInstance.getAdopters.call()
console.log(adopters)
}
render(){
return <button></button>//hello,{this.state.name}
}
}
export default App
Renovare interface ut sequitur
Oratio contractus adeptus est
Variabilibus supra utere ut inscriptione locali et defalta metamask electronica ratio habeatur.
https://blog.csdn.net/weixin_41937552/article/details/106990561?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
Causa quare electronica metamask hic obtineri non potest est ut supra
https://blog.csdn.net/weixin_39421014/article/details/103323245
Potes primum declinemus metamask in secretum permissiones
https://www.freesion.com/article/8518937500/
Secreti modus occasus et compatible JS code
https://blog.csdn.net/JackieDYH/article/details/115380677?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=001.2101.3001.4242
Accipere propter informationem
Post modificationem Codicis, munus initializationem mutabis in partem.
Metamask uti potes ut cum pagina coniungas et electronica hodiernam metamask imprimere potes.
Deinde, signum mutationes fac pro eventu click
Hic strepitando in adoptionem capsulam ob solutionem poplitem reddet, quia munus scribendo vocandum et scriptum in vinculo necesse est.
Feliciter munus vocamus quod scribendum est ad clausuram localem (sicut sequitur cum pyga clicked)
Totum codicem, qui tandem cucurrit, feliciter hoc modo est;
import React from 'react'
import Web3 from 'web3'
import TruffleContract from 'truffle-contract'
import AdoptionJson from './truffle/build/contracts/Adoption.json' //引入前面智能合约编译好得到的json文件
//1.链接合约
//2.执行一下合约内部函数
//3.添加ant.design ui库支持
//4.完成项目
class App extends React.Component{
constructor(props){
super(props)
this.web3 = null
this.Adoption = null
this.init()
this.state = {
//name:'woniu'
}
}
async init(){
//如果网页中的web3不是undefined
//if(typeof window.web3 != 'undefined'){
// this.web3Provider = window.web3.currentProvider; //metamask内置了web3的实例,实际可以手动链接
//}else{
// alert('please install metamask')
//}
//this.web3 = new Web3(this.web3Provider) //将我们的this.web3Provider装载进来
//this.initAdoption()
/* 新版的方式 */
//var web3Provider;
if (window.ethereum) {
this.web3Provider = window.ethereum;
try {
// 请求用户授权
await window.ethereum.enable();
} catch (error) {
// 用户不授权时
console.error("User denied account access")
}
} else if (window.web3) { // 老版 MetaMask Legacy dapp browsers...
this.web3Provider = window.web3.currentProvider;
} else {
this.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
}
this.web3 = new Web3(this.web3Provider);//web3js就是你需要的web3实例
this.web3.eth.getAccounts(function (error, result) {
if (!error)
console.log(result)//授权成功后result能正常获取到账号了
//this.account = result
});
//this.account =result
//this.account =account
this.initAdoption()
}
initAdoption(){
this.Adoption = TruffleContract(AdoptionJson) //使用TruffleContract传入编译后的合约,然后创建实例,可以调用合约内部函数
this.Adoption.setProvider(this.web3Provider) //设置来源,链接合约
return this.markAdopted()
}
//部署,这个是异步的,使用this.Adoption.deployed().then()也可以,这里用
//this.markAdopted(){
//部署链接一下
// const adoptionInstance = this.Adoption.deployed().then()
//}
async markAdopted(){
//部署链接一下
//await同步方式获取异步数据
const adoptionInstance = await this.Adoption.deployed() //部署,这个是异步的,使用this.Adoption.deployed().then()也可以,这里用
//调用合约内部函数getAdopters
const adopters = await adoptionInstance.getAdopters.call()
console.log(adopters)
}
async adopt(petId){
//const account = window.web3.eth.defaultAccount //获取metamask中默认的账户
// 授权获取账户
const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
const myAccount = accounts[0]; //获取当前metamask的地址
const adoptionInstance = await this.Adoption.deployed() //再次进行部署
await adoptionInstance.adopt(petId,{from:myAccount}) //调用adopt只传递唯一一个参数,以及来源之前获取的地址,进行写入函数
this.markAdopted()
}
render(){
//onclick点击事件,调用领养函数
return <button onClick={()=>this.adopt(2)}>领养第二个</button>//hello,{this.state.name}
}
}
export default App
Omnia munera feliciter exsecuta sunt, etiam lectio et scriptura munera.
In hoc codice quaedam vitia adhuc habet.
Cum click rejiciunt vel exire directe
Proximus gradus est ornare UI