溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Web3E開(kāi)發(fā)框架怎么使用

發(fā)布時(shí)間:2021-12-29 14:32:13 來(lái)源:億速云 閱讀:130 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“Web3E開(kāi)發(fā)框架怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Web3E,即Web3 for Embedded,是一個(gè)面向Arduino嵌入設(shè)備的全功能Web3開(kāi)發(fā)框架,開(kāi)發(fā)語(yǔ)言為C/C++。Web3E可以幫助嵌入設(shè)備開(kāi)發(fā)者快速實(shí)現(xiàn)能夠接入以太坊區(qū)塊鏈的物聯(lián)網(wǎng)/IoT設(shè)備,為物聯(lián)網(wǎng)開(kāi)發(fā)者打開(kāi)了一扇新的大門(mén)。

1、Web3E簡(jiǎn)介

Web3E主要在ESP32上進(jìn)行測(cè)試,ESP8266也可以正常工作。Web3E還包含了一個(gè)快速開(kāi)發(fā)DApp注入器,可以很方便地將你的嵌入設(shè)備轉(zhuǎn)換為以太坊DApp。

Web3E的開(kāi)發(fā)始于一個(gè)簡(jiǎn)單的需求:開(kāi)發(fā)一個(gè)能夠在ESP32上運(yùn)行的門(mén)禁DApp。這期間經(jīng)歷了相當(dāng)多的挫折,我們意識(shí)到需要一個(gè)方法來(lái)簡(jiǎn)化物聯(lián)網(wǎng)嵌入設(shè)備的DApp的開(kāi)發(fā),這就是開(kāi)發(fā)Web3E的最初動(dòng)機(jī)。

Web3E的主要特性包括:

  • 支持TokenScript接口

  • 開(kāi)箱即用的以太坊DApp注入器,可以立刻將物聯(lián)網(wǎng)嵌入設(shè)備轉(zhuǎn)化為支持ECDSA密碼學(xué)技術(shù) 的以太坊DApp

  • 經(jīng)過(guò)優(yōu)化精簡(jiǎn)的密碼學(xué)算法實(shí)現(xiàn)

  • 交易系統(tǒng)已經(jīng)充分優(yōu)化,以太坊ERC20和ERC875合約都有實(shí)際使用

2、Web3E安裝

建議使用Platformio安裝Web3E,因?yàn)閃eb3E目前已經(jīng)是Platformio開(kāi)發(fā)庫(kù)的一份子了,所以不需要克隆原始的Web3E代碼庫(kù)。

使用Web3E很簡(jiǎn)單,只需要在Platformio中創(chuàng)建一個(gè)新項(xiàng)目,然后參考如下內(nèi)容修改platformio.ini:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino

; Serial Monitor options
monitor_speed = 115200

lib_deps =
  # Using a library name
  Web3E

3、Web3E的示例及使用方法

在Web3E中預(yù)置了4個(gè)物聯(lián)網(wǎng)+以太坊的示例應(yīng)用:

  • Simple DApp:展示如何創(chuàng)建可以運(yùn)行在嵌入設(shè)備上的DApp。板載密碼學(xué)引擎 可以與用戶(hù)輸入充分交互,在ESP32上的公鑰恢復(fù)和簽名驗(yàn)證可以毫秒級(jí)完成

  • 查詢(xún)錢(qián)包余額:展示在嵌入設(shè)備上如何查詢(xún)ERC20代幣余額以及非同質(zhì)化通證(NFT)余額

  • 交易廣播:展示在嵌入設(shè)備上如何實(shí)現(xiàn)ERC20和ERC875代幣的轉(zhuǎn)賬交易

  • 以太幣轉(zhuǎn)賬:展示如何在嵌入設(shè)備上實(shí)現(xiàn)以太幣轉(zhuǎn)賬

例如,下面的代碼展示了如何使用Web3E讓物聯(lián)網(wǎng)嵌入設(shè)備支持以太幣轉(zhuǎn)賬:

// Setup Web3 and Contract with Private Key
...

Contract contract(&web3, "");
contract.SetPrivateKey(PRIVATE_KEY);
uint32_t nonceVal = (uint32_t)web3.EthGetTransactionCount(&address); //obtain the next nonce
uint256_t weiValue = Util::ConvertToWei(0.25, 18); //send 0.25 eth
unsigned long long gasPriceVal = 1000000000ULL;
uint32_t  gasLimitVal = 90000;
string emptyString = "";
string toAddress = "0xC067A53c91258ba513059919E03B81CF93f57Ac7";
string result = contract.SendTransaction(
				nonceVal, gasPriceVal, gasLimitVal, &toAddress, 
				&weiValue, &emptyString);

下面的代碼使用Web3E在物聯(lián)網(wǎng)嵌入設(shè)備上查詢(xún)指定的以太坊地址的以太幣余額:

//obtain balance in Wei
uint256_t balance = web3.EthGetBalance(&address); 
//get string balance as Eth (18 decimals)
string balanceStr = Util::ConvertWeiToEthString(&balance, 18);

使用Web3E讓嵌入設(shè)備支持ERC20代幣的發(fā)送要復(fù)雜一點(diǎn),但考慮到這是在用C/C++,也還能夠接受:

string contractAddr = "0x20fe562d797a42dcb3399062ae9546cd06f63280";
Contract contract(&web3, contractAddr.c_str());
contract.SetPrivateKey(<Your private key>);

//Get contract name
string param = contract.SetupContractData("name()", &addr);
string result = contract.ViewCall(&param);
string interpreted = Util::InterpretStringResult(web3.getString(&result).c_str());
Serial.println(interpreted.c_str());

//Get Contract decimals
param = contract.SetupContractData("decimals()", &addr);
result = contract.ViewCall(&param);
int decimals = web3.getInt(&result);
Serial.println(decimals);

unsigned long long gasPriceVal = 22000000000ULL;
uint32_t  gasLimitVal = 4300000;

//amount of erc20 token to send, note we use decimal value obtained earlier
uint256_t weiValue = Util::ConvertToWei(0.1, decimals);

//get nonce
uint32_t nonceVal = (uint32_t)web3.EthGetTransactionCount(&addr);
string toAddress = "0x007bee82bdd9e866b2bd114780a47f2261c684e3";
string valueStr = "0x00";

//Setup contract function call 
string p = contract.SetupContractData("transfer(address,uint256)", &toAddress, &weiValue); 

//push transaction to ethereum
result = contract.SendTransaction(nonceVal, gasPriceVal, gasLimitVal, &contractAddr, &valueStr, &p);
string transactionHash = web3.getString(&result);

“Web3E開(kāi)發(fā)框架怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI