3M丨MMM丨dapp互助質押挖礦系統開發技術詳細/案例開發/原始碼方案

開發MrsFu123發表於2023-04-24

 區塊鏈是分散式資料儲存、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。

 

  狹義來講,區塊鏈是一種按照時間順序將資料區塊以順序相連的方式組合成的一種鏈式資料結構,並以密碼學方式保證的不可篡改和不可偽造的分散式賬本。

 

  廣義來講,區塊鏈技術是利用塊鏈式資料結構來驗證與儲存資料、利用分散式節點共識演算法來生成和更新資料、利用密碼學的方式保證資料傳輸和訪問的安全、利用由自動化指令碼程式碼組成的智慧合約來程式設計和運算元據的一種全新的分散式基礎架構與計算方式。


部署測試合約

這次部署一個很簡單的合約。合約只儲存一個狀態  data,並可以透過  set()更新狀態 。

合約的程式程式碼:

pragma solidity ^0.4.19;contract SimpleStorage {    uint public data;    function set(uint x) public {        data = x;    }}

合約地址: 0x5fb30123b9efedcd15094266948fb7c862279ee1

合約的 function signatures:

{    "73d4a13a": "data()",    "60fe47b1": "set(uint256)"}

查詢合約狀態

使用  web3.eth.call

// Requestvar result = web3.eth.call({    to: "0x5fb30123b9efedcd15094266948fb7c862279ee1",    data: "0x" + "73d4a13a"});// Print Resultconsole.log(parseInt(result, 16));

Print 出來的結果是  0,因為還沒有更新狀態。


更新合約狀態

使用  web3.eth.sendRawTransaction

RPC 和 web3.js 提供的  SendTransaction 都是連到一個節點,使用節點中的賬戶sign 過在傳送。而如果要用自己的賬號就要用  sendRawTransaction,也就是說要自己建立 transaction、自己 sign 後,再透過  sendRawTransaction 傳送。

Define raw transaction

var rawTx = {    nonce: '0x14',    gasPrice: '0x3B9ACA00',    gasLimit: '0xC20A',    to: '0x5fb30123b9efedcd15094266948fb7c862279ee1',    value: '0x00',    data: '0x' + '60fe47b1' + '000000000000000000000000000000000000000000000000000000000000000a'}

rawTx 中包含:

  • nonce:記錄目前賬戶送出的交易筆數,用來避免 replay attack,每次傳送要加 1。可以用 RPC  eth_getTransactionCount 查詢目前賬戶的 nonce。也可以用 Etherscan 查,但 Etherscan 顯示的  No Of Transactions 會包含送出去但沒有成功的交易,所以會不準
  • gasPrice:一般用 1 Gwei(= 1000000000 = 0x3B9ACA00)
  • gasLimit:gaslimit  估計gas值
  • to:合約地址
  • value:要送的 Ether 數量,因為只是要呼叫合約所以先設定為 0
  • data:賦值給合約的引數。由三個部分組成: 0x60fe47b1和一個 32 bytes 的引數


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

相關文章