国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

以太坊Dapp通過web3js部署調(diào)用智能合約

這篇具有很好參考價(jià)值的文章主要介紹了以太坊Dapp通過web3js部署調(diào)用智能合約。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

參考視頻:https://www.bilibili.com/video/BV14z4y1Z7Jd?p=1

1、在線編譯智能合約

https://remix.ethereum.org/
以太坊Dapp通過web3js部署調(diào)用智能合約

pragma solidity ^0.4.0;

contract MyCounter{
    uint256 counter;

    constructor() public {
        counter = 1;
    }

    function kipCounter(uint step) public{
        counter +=step;
    }
    function getCounter() public view returns (uint256){
        return counter;
    }
}

2、部署合約

  1. 創(chuàng)建一個(gè)新的文件夾mkdir MyDapp2
  2. 啟動(dòng)ganache-cli
  3. 下載web3npm install web3,注:ganache的啟動(dòng)和deploy.js要在同一個(gè)目錄。
  4. 先進(jìn)行測試node deploy.js
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

web3.eth.getAccounts().then(console.log);
  1. 部署合約
    web3的版本:1.7.1
    復(fù)制 WEB3DEPLOY 的內(nèi)容到deploy.js
    == ganache需要啟動(dòng)才能運(yùn)行 ==
    以太坊Dapp通過web3js部署調(diào)用智能合約
    修改
    from: web3.eth.accounts[0],成ganache對(duì)應(yīng)的賬戶
var mycounterContract = new web3.eth.Contract([{"constant":true,"inputs":[],"name":"getCounter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"step","type":"uint256"}],"name":"kipCounter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);


var mycounter = mycounterContract.deploy({
     data: '0x608060405234801561001057600080fd5b50600160008190555060e7806100276000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638ada066e14604e578063e24801d8146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a9565b005b60008054905090565b806000808282540192505081905550505600a165627a7a72305820948660862b007e09bde5dcec9d432c7caced4dff0a50ed85f6f1af784b50ed750029', 
     arguments: [
     ]
}).send({
     from: '0x0bfb484EB4B451FC20F52cDa3FF366097858C69A', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 }).then(function(contract){
 console.log("Contract address:",contract.options.address);
 });

合約地址每次啟動(dòng)都會(huì)變化
最終結(jié)果:
以太坊Dapp通過web3js部署調(diào)用智能合約

3、調(diào)用合約

  1. 首先創(chuàng)建新工程express -e contractTest
    以太坊Dapp通過web3js部署調(diào)用智能合約
  2. 進(jìn)入工程目錄cd contractTest進(jìn)行npm install npm install web3
  3. 修改app.js文件
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

var ejs = require('ejs');
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('.html',ejs.__express);
app.set('view engine', 'html');
// app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
  1. 修改route目錄下的index.js
var express = require('express');
var router = express.Router();

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

web3.eth.getAccounts().then(console.log);

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;
  1. 在view的目錄下新建index.html
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
  </body>
</html>

  1. 測試能否成功連接web3npm start
    以太坊Dapp通過web3js部署調(diào)用智能合約
    web3較為常用的方法called, send, estimateGas
    called:不對(duì)參數(shù)進(jìn)行改變的方法
    send:修改值(修改區(qū)塊鏈的狀態(tài))
    estimatedGas:通過在本地執(zhí)行方法,返回消耗值,不進(jìn)行新的交易
    以太坊Dapp通過web3js部署調(diào)用智能合約
    以太坊Dapp通過web3js部署調(diào)用智能合約
    第一個(gè)參數(shù)ABI,第二個(gè)參數(shù)是合約地址

  2. 修改route目錄中的index.js文件文章來源地址http://www.zghlxwxcb.cn/news/detail-421951.html

var express = require('express');
var router = express.Router();

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

//web3.eth.getAccounts().then(console.log);

var myContract = new web3.eth.Contract([
	{
		"constant": true,
		"inputs": [],
		"name": "getCounter",
		"outputs": [
			{
				"name": "",
				"type": "uint256"
			}
		],
		"payable": false,
		"stateMutability": "view",
		"type": "function"
	},
	{
		"constant": false,
		"inputs": [
			{
				"name": "step",
				"type": "uint256"
			}
		],
		"name": "kipCounter",
		"outputs": [],
		"payable": false,
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"payable": false,
		"stateMutability": "nonpayable",
		"type": "constructor"
	}
],'0x871662eAB2B567963587710196561C60740c2233');

//調(diào)用合約
//可以指定從哪個(gè)賬戶發(fā)出,則任意選一個(gè)賬戶
// myContract.methods.getCounter().call({from: '0xe23493eACdC904cfd5826f9775Ee22B881051630'}, function(error, result){
//     console.log("counter:",result);
// });

//也可以不指定
var init_counter = 0;
var current_counter = 0;
myContract.methods.getCounter().call().then(function(counter){
    console.log("init counter:",counter);
    init_counter = counter;
})

/* GET home page. */
//修改counter的值,并傳遞該參數(shù)
router.get('/', function(req, res, next) {
    myContract.methods.kipCounter(5).send({from: '0xe23493eACdC904cfd5826f9775Ee22B881051630'})
    .then(function(){
            myContract.methods.getCounter().call().then(function(counter){
                console.log('current counter:',counter);
                current_counter = counter;
                res.render('index', { init: init_counter, current:current_counter});
            });
        });
});

module.exports = router;

  1. 修改view里的index.html
<!DOCTYPE html>
<html>
  <head>
    <title>調(diào)用合約</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>調(diào)用合約</h1>
    <p>init counter: <%= init %><br>current counter:<%=current %></p>
  </body>
</html>
  1. 運(yùn)行npm start
    以太坊Dapp通過web3js部署調(diào)用智能合約以太坊Dapp通過web3js部署調(diào)用智能合約
    至此,視頻06結(jié)束。

到了這里,關(guān)于以太坊Dapp通過web3js部署調(diào)用智能合約的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【W(wǎng)eb3】 Web3JS Pay Api

    Web3Network.eth.sendSignedTransaction(serializedTx) 參數(shù): from - String|Number :發(fā)送帳戶的地址。如果未指定,則使用web3.eth.defaultAccount屬性。或web3.eth.accounts.wallet中本地的地址。 to - String :(可選)消息的目標(biāo)地址,若未定義則為發(fā)送消息。 value - Number|String|BN|BigNumber :(可選)為wei中的交易

    2024年02月16日
    瀏覽(32)
  • 【跟樂樂學(xué)web3開發(fā)】一.使用IDE工具webstorm來編寫web3js

    【跟樂樂學(xué)web3開發(fā)】一.使用IDE工具webstorm來編寫web3js

    web3可以用java語言來編寫,通過java的 web3j 依賴來編寫,但是web3j對(duì)于abi的應(yīng)用等支持庫不太完整,所以還是多少有點(diǎn)局限性。 因此在當(dāng)今的web3領(lǐng)域中,使用基于javaScript的 web3.js 庫來編寫web3應(yīng)用是主流。 市面上大多的教材中,對(duì)于web3.js的編寫是基于vscode這一款ide工具,這里

    2024年02月04日
    瀏覽(23)
  • 使用nodejs和web3js實(shí)現(xiàn)鏈接metamask錢包并實(shí)現(xiàn)合約交互

    在以太坊區(qū)塊鏈上,metamask錢包是一個(gè)非常常用的錢包,用以管理以太幣和其他以太坊資產(chǎn)。同時(shí),它也是一個(gè)重要的以太坊智能合約交互工具。在本文中,我們將介紹如何使用nodejs和web3js實(shí)現(xiàn)鏈接metamask錢包并實(shí)現(xiàn)合約交互。 在開始之前,首先需要安裝NodeJS和Web3JS。 NodeJS是

    2024年02月04日
    瀏覽(32)
  • 使用nodejs和web3js來實(shí)現(xiàn)鏈接MetaMask錢包并取消風(fēng)險(xiǎn)代幣授權(quán)

    隨著區(qū)塊鏈技術(shù)的快速發(fā)展,數(shù)字貨幣資產(chǎn)在投資及交易市場中得到了廣泛的應(yīng)用。而在數(shù)字貨幣交易過程中,錢包是一個(gè)非常重要的環(huán)節(jié)。比如MetaMask就是一款非常流行的區(qū)塊鏈錢包,它可以讓用戶在瀏覽器中安全地管理自己的數(shù)字資產(chǎn)。 然而,在數(shù)字貨幣交易過程中也存

    2024年01月23日
    瀏覽(36)
  • web3Js(干貨)(多簽的流程原理)看完這一篇就懂了(波場網(wǎng)絡(luò)-請(qǐng)勿用于除學(xué)習(xí)外其他用途)

    連接波場網(wǎng)絡(luò): 其中APIKEY可以在官網(wǎng)獲取; 可以使用tronWeb.isConnected()判斷是否連接成功 創(chuàng)建離線波場地址: 該地址未激活,如果需要激活, 通常需要一定數(shù)量的 TRX(TRON 的本地代幣)用于支付激活費(fèi)用; 等待區(qū)塊確定 就可以查看激活信息; 創(chuàng)建隨機(jī)助記詞與私鑰: 如何讓

    2024年02月04日
    瀏覽(99)
  • Web3.js在以太坊上部署和調(diào)用智能合約

    介紹如何使用Web3.js在以太坊上部署和調(diào)用智能合約;Web3.js是以太坊JavaScript API的實(shí)現(xiàn),它可以與以太坊區(qū)塊鏈進(jìn)行交互 智能合約編寫 使用Solidity編寫一個(gè)簡單的智能合約,然后使用Web3.js將其部署到以太坊區(qū)塊鏈,通過JavaScript調(diào)用該智能合約 這個(gè)智能合約非常簡單。它有兩

    2024年02月16日
    瀏覽(20)
  • java使用web3j,部署智能合約在測試鏈上,并調(diào)用(萬字詳細(xì)教程)

    java使用web3j,部署智能合約在測試鏈上,并調(diào)用(萬字詳細(xì)教程)

    最近在學(xué)區(qū)塊鏈相關(guān),想做點(diǎn)自己感興趣的。網(wǎng)上關(guān)于這塊部分的坑也比較多,最近也是問了很多行業(yè)從事者才慢慢填坑,因此記錄下來分享一下。 錢包 :metemask、 solidity編譯器 :remix 、 java ide :idea。 智能合約編寫的我選擇在remix上方便,而且部署的時(shí)候不需要自定義gasP

    2024年01月16日
    瀏覽(25)
  • 【W(wǎng)EB3】如何使用Web3J庫開發(fā)應(yīng)用連接到以太坊區(qū)塊鏈網(wǎng)絡(luò)

    ? Web3j 是一個(gè)與以太坊智能合約交互并與以太坊節(jié)點(diǎn)集成的 Java 庫。它是高度模塊化、類型安全和反應(yīng)式的,專為以太坊上的 Java 和 Android 開發(fā)而構(gòu)建。Web3j 消除了編寫自定義集成代碼以連接到以太坊區(qū)塊鏈網(wǎng)絡(luò)的開銷。 通過 HTTP 和 IPC 實(shí)現(xiàn)完整的 Ethereum JSON-RPC客戶端 API,

    2024年02月02日
    瀏覽(34)
  • Java Web3J :使用web3j調(diào)用自己的智能合約的方法(教程)

    代碼世界有很多令人大呼小叫的技巧!有的代碼像魔術(shù)師一樣巧妙地隱藏了自己,有的像魔法師一樣讓你眼花繚亂,還有的像瑜伽大師一樣靈活自如。它們讓我們驚嘆不已,讓我們覺得自己仿佛置身于編碼的魔幻世界??靵矸窒砟阋娺^哪些令你膛目結(jié)舌的代碼技巧吧! web3j是

    2024年02月04日
    瀏覽(25)
  • 【web3j】java通過web3j監(jiān)聽并解析合約中的事件(event/emit)

    ① 查詢鏈上數(shù)據(jù)用的rpc(本示例是binance的,測試網(wǎng)可以使用:https://data-seed-prebsc-2-s2.binance.org:8545) ② 自己還要有一個(gè)測試鏈上部署好的合約,合約中要有一個(gè)方法emit了事件。 ③ java依賴 一、 通過自己合約的abi和bin生成一個(gè)java文件,abi和bin可以在remix的compiler模塊中獲取,

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包