BABA共享投票DAO流動性挖礦dapp系統開發智慧合約模式定製

nice1022發表於2023-03-10

合約互動

寫完合約程式碼之後,開發I34-合約I633-定製53I9,前端頁面實現就不在此贅述,主要介紹如何使用 web3 與合約互動,這裡使用到的 web3 版本是 1.0,web3 1.0 和 0.2x.x 的 API 呼叫方式差別較大,1.0 的 API 支援非同步呼叫。


安裝 Metamask 瀏覽器外掛後,會在瀏覽器頁面內注入一個 web3 例項。檢測頁面中是否存在 web3 例項,如果不存在則連線自己的例項。


import Web3 from 'web3';if (typeof web3 !== 'undefined') {
 web3 = new Web3(web3.currentProvider);
} else {
 web3 = new Web3(new Web3.providers.HttpProvider(NODE_NRL));
}


傳入合約 ABI,合約地址,例項化合約物件。


this.contract = new web3.eth.Contract(  CONTRACT_ABI,  CONTRACT_ADDR,
);

呼叫合約中的方法,透過try catch可以捕獲到 Metamask 彈窗取消交易操作。

userBet = async () => {  try {    await this.contract.methods
     .bet(
       ...
     )
     .send({        from: ACCOUNT,        value: MONEY,
     });
 } catch (error) {
   ...
 }
}


查詢記錄的日誌,可以透過指定事件名稱、區塊高度及過濾條件來進行日誌查詢,值得注意的是,在合約內不能查詢到日誌資訊。


queryEvent = async () => {  const event = await this.contract.getPastEvents(    EVENT_NAME,
   {      filter: {},      fromBlock: 0,      toBlock: 'latest',
   }
 )
}


功能擴充

比如修改使用者 參與金額及充值這類敏感操作,就需要管理員的許可權來進行操作。同樣地,我們也可以擴充贊助商的功能,透過充值獎池的累計金額排名來展示贊助商的廣告,這裡就不做展開了。

定義修飾器,在建構函式里設定管理員地址,將建立合約的賬戶設定為管理員。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2939149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章