NFT數藏商品系統開發技術詳情
常用API介紹
1. 簽名交易web3.eth.accounts.signTransaction()
web3.eth.accounts.signTransaction(tx, privateKey, [, callback]) => promise<object>
1
第一個引數為tx,即定義該交易的細則,在其中可以定義的交易細則有gas,to,value,gasPrice等引數,其中gas是必須要設定的引數(其餘用到的交易引數都是可選擇的),gas引數規定了該交易將要花費的gas費用,to引數則說明了這筆交易的接受者,而value引數則規定了這筆交易中轉移代幣的數量
第二個引數為privateKey,為發起交易人的私鑰,該交易將由該私鑰進行簽署
第三個引數為callback,該引數為一個可選引數,該回撥函式返回的第一個引數為一個錯誤物件,第二個引數為結果物件
該介面返回一個Promise物件,如果簽署交易成功,將會返回該交易的一些具體資訊,如messageHash,rawTransaction,transactionHash等資訊
2. 部署合約contractInstance.deploy()
new web3.eth.Contract(jsonInterface[, address][, options]) => promise<contract>
1
該方法用於生產合約例項,只有透過合約例項才能進行部署操作。該函式只需要填寫一個一個引數即可,jsonInterface即為該合約的abi,填入該引數即可完成合約例項的生成
contractInstace.deploy(options) => promise<transaction>
1
改方法用於部署合約,呼叫該函式將返回部署合約交易的具體資訊
其中的引數為options,其中裡面可以寫入兩個部分,即data(String)與arguments(Array)兩個引數,data引數為合約的bytecode;arguments引數為合約建構函式中的引數,因此該引數為可選的
deploy函式會返回一個交易物件,該物件自帶一個陣列與4個函式,陣列表示先前傳入的建構函式的入參,四個函式分別為send(),estimateGas(),encodeABI(),createAccessList()
3. 呼叫合約方法methods.myMethod.call()
myContract.methods.myMethod(param1[, param2[, ...]]).call(options [, defaultBlock] [, callback]) => returnValuesOfContract
1
該方法用於呼叫一個“constant”方法並在不發起任何交易的同時在EVM執行智慧合約的方法,使用此方法呼叫的智慧合約方法均不會改變合約狀態
其中myMethod()括號中填入的引數為該方法的入參,call()中填入的options包含如下幾個方面的值:from、gasPrice、gas,call()中還可以選擇性的填入defaultBlock與callback,其中defaultBlock為預設區塊設定,callback回撥函式第一個引數為錯誤物件,第二個引數為合約方法結果
該方法會返回撥用函式的返回結果,如果返回結果為多個,則返回一個帶有索引的物件
4. 訂閱監聽事件web3.eth.subscribe()
web3.eth.subscribe(type [, options] [, callback]) => subscriptionInstance
1
該方法用於訂閱監聽智慧合約中觸發的事件
其中訂閱方法包含四種方法,分別為:pendingTransactions,newBlockHeaders,syncing,logs
監聽事件一般採用newBlockHeaders模式,該模式訂閱監聽傳入的區塊頭,該特性可以作為計時器來檢查區塊鏈上的變化。callback引數與上述函式一樣,第一個引數為錯誤物件,第二個引數為結果物件
同時在該函式的返回內容中,有幾個回撥函式比較常見:on("connected"), on("data"), on("error"), on("changed"),
一旦訂閱成功連線則觸發on("connected"),該函式返回訂閱id;
當log有資料時觸發on("data");
當訂閱出錯時觸發on("error");
當有log被刪除出區塊鏈時觸發on("changed");
簡單介紹Ethers.js
Ethers.js與Web3.js一樣,都是以太坊標準JavaScript API庫,Ethers.js最初是為了ethers.io設計,後來擴充為一個開放的JS API庫,與Web3.js相同的是,Ethers.js同樣可以與Moonbeam進行正常互動,這得益於Moonbeam是一個完全相容以太坊EVM的智慧合約平臺;而與Web3.js不同的是,Ethers.js在使用時不需要過多的回撥函式,而且可以搭配Hardhat工具是的語法得到進一步的最佳化
Ethers.js(Hardhat)的安裝與常用API介紹
Ethers.js(Hardhat)的安裝
Ethers.js的安裝分為兩種,一種為直接使用命令列安裝,另一種為透過Hardhat間接安裝(配合Hardhat使用),推薦第二種透過Hardhat?的方式使用Ethers.js(安裝Hardhat時透過hardhat-ethers外掛安裝經過包裝後的Ethers.js)
安裝步驟如下:
// command line
npm install --save ethers
// install Hardhat
npm init
npm install --save-dev hardhat
npx hardhat
1
2
3
4
5
6
7
常用API介紹
Ethers.js庫中的API主要由4大部分組成:Providers,Signers,Contract Interaction,Utilities
1. Provider
Provider是以太坊網路連線的抽象,其為標準以太坊節點功能提供簡潔、一致的介面
在Provider中比較常用的方法為JsonRpcProvider,該方法允許透過JSON-RPC的方式連線某一個節點網路
// new ethers.providers.JsonRpcProvider([urlOrConnectionInfo[, networkish]])
const provider = new ethers.providers.JsonRpcProvider(
'
{
chainId: 1287,
name: 'moonbase-alpha'
}
);
1
2
3
4
5
6
7
8
在上面的程式碼示例中,透過JsonRpcProvider的方式,連線到了Moonbase Alpha測試網中,在其中不止可以定義url引數,還可以定義該網路的chainId與name等資訊
2. Signers
Signer是以太坊賬戶的抽象,可用於對訊息和交易進行簽名,並將簽名過的交易傳送到以太坊網路以執行狀態更改操作
在Signer中比較常用的方法為Wallet,只有Wallet可以使用私鑰對交易和資訊進行簽名
// new ethers.Wallet(privateKey[, provider])
const alice = new ethers.Wallet(privateKeyAlice, provider);
const bob = new ethers.Wallet(privateKeyBob, provider);
const txReceipt = await alice.sendTransaction({
to: bob.address,
value: ethers.utils.parseEther('1.0')
});
await txReceipt.wait();
1
2
3
4
5
6
7
8
9
在上面的程式碼示例中,使用Wallet定義了alice與bob兩個Signer,接下來alice呼叫方法sendTransaction()方法向bob發起交易,轉移了1 ether的token
3. Contract Interaction
部署合約與生成合約例項離不開下面介紹的兩個方法:ContractFactory()與Contract,具體方法直接看下面的程式碼示例介面
// deploy contract
new ethers.ContractFactory(interface, bytecode[, signer])
contractFactory.deploy(..args)
contract.deployed()
// generate contract instance
new ethers.Contract(address, abi, signerOrProvider)
1
2
3
4
5
6
7
其中ContracFactory中的interface引數代表合約的abi
使用Hardhat編譯過後的合約,其abi與bytecode等編譯資訊都存放在了專案根目錄下的artifacts/contracts/CONTRACT_NAME.json檔案中
4. Utilities
utilities下提供的各種方法更像是各種各樣的工具,比較常用的有對BigNumber的操作,以太坊Token單位的直接轉換以及將string於bytes32相互轉化的工具等,以下列出幾個常見方法
// BigNumber
BigNumber.toNumber() => number
BigNumber.toHexString() => string<DataHexString>
// Display Logic and Input
ethers.utils.parseEther(string) => BigNumber
ethers.utils.formatEther(value(BigNumber)) => string
// Strings
ethers.utils.parseBytes32String(aBytesLike) => string
ethers.utils.formatBytes32String(text) => string<DataHexString<32>>
1
2
3
4
5
6
7
8
9
10
11
BigNumber.toNumber():將BigNumber的值轉換為JavaScript值
BigNumber.toHexString():將BigNumber值轉換為0x開頭,16進位制的值
ethers.utils.parseEther(string):將一個整數轉換為以ether為單位的大整數
ethers.utils.formatEther(value(BigNumber)):將大整數轉換為以ether為單位的整數
ethers.utils.parseBytes32String(aBytesLike):返回一個bytes 32編碼資料表示的解碼字串
ethers.utils.formatBytes32String(text):返回文字的bytes 32字串表示形式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2937293/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OpenSea交易NFT數字藏品系統合約開發技術詳情
- NFT非梵藝術/數藏系統開發/非梵藝術技術開發NFT詳情
- NFT蝸客數藏開發丨蝸客數藏系統開發技術丨NFT數字藏品詳情
- nft 數字藏品開發方案丨nft 數字藏品系統開發(功能及詳情)
- 探元NFT數藏/數字藏品/NFT元宇宙藏品系統技術開發/程式碼示例元宇宙
- NFT生態藝術開發詳情丨數藏藝術系統開發丨Solidity語言技術Solid
- OpenSea交易NFT藏品系統模式開發技術及詳情分析模式
- nft數藏平臺系統開發技術方案丨數藏nft系統ai繪畫定製開發技術流程AI
- NFT元宇宙數字藏品系統技術開發設計元宇宙
- NFT數字藏品系統開發
- NFT元宇宙開發丨Doodles數字藏品系統開發技術丨Doodles丨NFT元宇宙
- NFT數藏(鏈遊)元宇宙藝術交易系統功能開發詳情元宇宙
- 鏈遊NFT遊戲/NFT元宇宙/系統技術開發/NFT數藏遊戲元宇宙
- 非梵藝術NFT數藏開發/系統技術開發/非梵藝術NFT模式模式
- 金鳳數藝NFT數藏系統技術開發示例
- NFT數字藏品系統開發功能技術需求方案丨AI繪畫數藏模式系統開發對接功能AI模式
- MT碳數藏(NFT)系統模式開發技術分析模式
- NFT生態藝術開發丨NFT數藏藝術丨NFT生態藝術系統開發技術
- TAURO平行宇宙NFT探索系統技術開發詳情
- 聯盟鏈NFT數字藏品系統開發技術(現成原始碼)原始碼
- NFT天空數藏系統技術開發丨python語言丨天空數藏nft丨defiPython
- nft鏈遊元宇宙(NFT遊戲)系統模式開發技術詳情元宇宙遊戲模式
- 探元數藏NFT開發丨藏品原始碼丨探元數藏系統設計開發丨NFT技術原始碼
- NFT鏈遊系統開發丨NFT元宇宙遊戲功能開發技術詳情元宇宙遊戲
- GameFi+NFT鏈遊系統開發/NFT遊戲元宇宙技術開發詳情GAM遊戲元宇宙
- NFT數藏數字藏品系統開發專案邏輯分析方案(原理分析)
- NFT數字藏品系統開發介紹
- NFT數字藏品開發丨NFT盲盒數藏系統技術開發丨DAPP丨Defi丨NFTAPP
- 悅境2.0NFT數字藏品系統程式設計開發技術示例程式設計
- NFT數字藏品系統開發(開發案例)丨數字藏品系統開發(詳細及規則)丨原始碼部署原始碼
- Stepn跑鞋NFT鏈遊合成遊戲系統開發技術詳情遊戲
- NFT數藏元宇宙藝術品交易系統開發技術解析元宇宙
- NFT藝術數字藏品系統模式開發丨NFT丨dapp丨defi模式APP
- NFT天空數藏元宇宙技術開發系統及程式碼示例丨NFT元宇宙
- NFT數藏系統開發詳細(邏輯功能)NFT實物數藏模式系統開發流程(原始碼搭建)模式原始碼
- 悅境2.0數藏系統技術開發/原始碼/DAPP/NFT原始碼APP
- NFT數藏實物專案系統開發技術)(成熟原始碼)原始碼
- NFT數字藏品開發功能丨NFT數字藏品系統開發(開發流程及方案)