我們想要的效果是每乙個交易下面的備註都可以寫上我們需要的內容。下圖是我們已經可以實現的效果
eoa 之間傳輸值的交易(例如,改變傳送方和接收方餘額大小)。
傳送訊息來呼叫合約的交易(例如,通過傳送訊息呼叫來觸發 setter 方法,以設定合約中的值)。
用於部署合約的交易(由此建立了合約賬戶)。
(從技術角度來講,前兩種交易是一樣的…它們都是通過訊息呼叫來改變賬戶狀態的交易,只不過乙個是 eoa 賬戶,乙個是合約賬戶。此處將交易分為三種是為了方便讀者的理解。)
交易由以下部分組成:
nonce
此賬戶發出的交易序號數(校對注:可以粗略理解為「這是該賬戶的第幾筆交易」)。
gasprice
執行此交易、進行計算時為每單位 gas 所支付的費用(以 wei 計量)。
gaslimit
執行此交易時可以使用的最大 gas 數量。
to
value
v, r, s
在交易的密碼學簽名中用到的值,可以用於確定交易的傳送方。
data(16進製制文字)
傳送訊息呼叫時附帶的輸入資料(例如,假設你想要執行智慧型合約中的 setter 方法,資料區就應該包括 setter 方法的識別符號,以及你想要設定的引數值)。
發起一筆以太坊交易
使用json-rpc,或者web3j
在引數data 內容中做備註,內容上鏈資訊做16進製制轉換
eth_sendtransaction建立乙個新的訊息呼叫交易,如果資料字段中包含**,則建立乙個合約。
引數object
- 交易物件,結果如下:
params:
transaction transaction= transaction.createtransaction 建立乙個交易事件方法
交易執行介面sendtransaction(token token, string from, string to, string money, string remarks)
*
@param token 代幣的具體資訊
*@param from 轉出賬戶位址
*@param to 轉入賬戶位址
*@param money 交易金額
*@param remarks 備註資訊用於文字相關資料上鏈
* @return txid 區塊鏈交易id
remarks 內容處理,上鏈操作
base64 解碼,中文傳過來的內容使用base64編碼,使用時需要解碼,放著傳輸過程資料丟失 解析錯誤
base64.decoder decoder = base64.
getdecoder()
;string base64 =
newstring
(decoder.
decode
(remarks)
,"utf-8");
string hex =
str2hexstr
(base64)
;
2. 將解碼後的內容進行16進製制轉換
/**
* 字串轉換成為16進製制
* @param str
* @return
*/private
static string str2hexstr
(string str)
char
chars =
"0123456789abcdef"
.tochararray()
; stringbuilder sb =
newstringbuilder(""
);byte
bs = str.
getbytes()
;int bit;
for(
int i =
0; i < bs.length; i++
)return sb.
tostring()
.trim()
;}
send 交易到以太坊
ethsendtransaction ethsendtransaction=web3.
ethsendtransaction
(transaction)
.sendasync()
.get
()
獲取交易txid
string txid = ethsendtransaction.
gettransactionhash()
;
區塊鏈2 0 以太坊ETH
區塊鏈研究者梅蘭妮 斯萬,在 區塊鏈 新經濟藍圖 一書中,她將區塊鏈分為 區塊鏈1.0,貨幣 區塊鏈2.0,合約 區塊鏈3.0,應用。位元幣是區塊鏈1.0的代表,以太坊則是區塊鏈2.0的代表。以太坊最初的設計目標就是成為智慧型合約和去中心化應用的平台,它的創始人是維塔利克 布特林 v神 以太坊區塊鏈...
ETH 以太坊的交易樹與收據樹(區塊鏈技術與應用)
每次發布乙個區塊時,區塊中的交易會形成一顆merkle tree,即交易樹,跟位元幣中的情況類似。此外,以太坊還新增了乙個收據樹,每個交易執行完之後形成乙個收據,記錄交易相關資訊。也就是說,交易樹和收據樹上的節點是一一對應的。主要是考慮到以太坊智慧型合約執行較為複雜,通過增加收據樹,便於快速查詢執行...
以太坊ETH原始碼分析(2) 交易執行過程
交易的發起一般通過呼叫rpc介面實現,eth原始碼本身提供了相關api,位於原始碼的ethereum go ethereum的internal包中 sendtransaction creates a transaction for the given argument,sign it and sub...