智慧合約DAPP系統技術開發(功能邏輯講解)
Solidity提供了bytes1到bytes32的型別,它們是固定長度的位元組陣列。
使用者可以讀取定長bytes的內容。
function bytesSample() public{
bytes32 barray;
//Initialize baarray
//read brray[0]
byte b = barray[0];
}
並且,可以將整數型別轉換為bytes。
uint256 s = 1;
bytes32 b = bytes32(s);
1.
2.
這裡有一個關鍵細節,Solidity採取大端序編碼,高地址存的是整數的小端。
例如,
b[0]是低地址端,它存整數的高階,所以值為0;
取b[31]才是1。
function bytesSample() public pure returns(byte, byte){
uint256 value = 1;
bytes32 b = bytes32(value);
//Should be (0, 1)
return (b[0], b[31]);
}
變長bytes
從上文中,讀者可瞭解定長byte陣列。此外,Solidity還提供了一個變長byte陣列:bytes。使用方式類似陣列,後文會有介紹。
string
Solidity提供的string,本質是一串經UTF-8編碼的位元組陣列,它相容於變長bytes型別。
目前Solidity對string的支援不佳,也沒有字元的概念。使用者可以將string轉成bytes。
function stringSample() public view returns(bytes){
string memory str = "abc";
bytes memory b = bytes(str);
//0x616263
return b;
}
要注意的是,當將string轉換成bytes時,資料內容本身不會被複製,如上文中,str和b變數指向的都是同一個字串abc。
address
address表示賬戶地址,它由私鑰間接生成,是一個20位元組的資料。同樣,它也可以被轉換為bytes20。
function addressSample() public view returns(bytes20){
address me = msg.sender;
bytes20 b = bytes20(me);
return b;
}
mapping
mapping表示對映, 是極其重要的資料結構。它與java中的對映存在如下幾點差別:
它無法迭代keys,因為它只儲存鍵的雜湊,而不儲存鍵值,如果想迭代,可以用開源的可迭代雜湊類庫
如果一個key未被儲存在mapping中,一樣可以正常讀取到對應value,只是value是空值(位元組全為0)。所以它也不需要put、get等操作,使用者直接去操作它即可。
contract Sample{
mapping(uint=>string) private values;
function mappingSample() public view returns(bytes20){
//put a key value pair
values[10] = "hello";
//read value
string value = values[10];
}
}
陣列
如果陣列是狀態變數,那麼支援push等操作:contract Sample{
string[] private arr;
function arraySample() public view {
arr.push("Hello");
uint len = arr.length;//should be 1
string value = arr[0];//should be Hello
}
}
陣列也可以以區域性變數的方式使用,但稍有不同:
function arraySample() public view returns(uint){
//create an empty array of length 2
uint[] memory p = new uint[](2);
p[3] = 1;//THIS WILL THROW EXCEPTION
return p.length;
}
struct
Solidity允許開發者自定義結構物件。結構體既可以作為狀態變數儲存,也可以在函式中作為區域性變數存在。
struct Person{
uint age;
string name;
}
Person private _person;
function structExample() {
Person memory p = Person(1, "alice");
_person = p;
}
全域性變數
示例合約程式碼的建構函式中,包含msg.sender。它屬於全域性變數。
在智慧合約中,全域性變數或全域性方法可用於獲取和當前區塊、交易相關的一些基本資訊,如塊高、塊時間、合約呼叫者等。
比較常用的全域性變數是msg變數,表示呼叫上下文,常見的全域性變數有以下幾種:
msg.sender:合約的直接呼叫者。
由於是直接呼叫者,所以當處於 使用者A->合約1->合約2 呼叫鏈下,若在合約2內使用msg.sender,得到的會是合約1的地址。如果想獲取使用者A,可以用tx.origin.
tx.origin:交易的"始作俑者",整個呼叫鏈的起點。
msg.calldata:包含完整的呼叫資訊,包括函式標識、引數等。calldata的前4位元組就是函式標識,與msg.sig相同。
msg.sig:msg.calldata的前4位元組,用於標識函式。
block.number:表示當前所在的區塊高度。
now:表示當前的時間戳。也可以用block.timestamp表示。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2985377/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DAPP系統開發邏輯丨DAPP系統開發功能丨合約DAPP系統開發技術APP
- DAPP合約系統開發邏輯技術丨DAPP成熟系統開發技術方案APP
- 代幣DAPP模式系統開發技術流程(邏輯方案)DAPP系統開發技術講解APP模式
- DApp智慧合約技術開發詳情講解APP
- DAPP智慧合約互助公排系統開發邏輯demoAPP
- 關於智慧合約馬蹄鏈DAPP系統開發技術講解(方案)APP
- 合約質押模式系統開發DAPP模組丨質押系統開發技術邏輯方案模式APP
- 趣步智慧合約模式系統開發dapp技術模式APP
- dapp智慧合約公排系統開發技術搭建APP
- FDF智慧合約DAPP複利系統技術開發APP
- NFT鏈遊功能開發丨DAPP智慧合約遊戲系統技術開發模式APP遊戲模式
- DAPP智慧合約理財分紅模式系統開發功能技術分析APP模式
- 智慧合約共享投票dapp系統開發(技術支援)丨dapp投票功能開發專案APP
- DAPP系統模式開發邏輯(成熟技術)APP模式
- 阿凡達(泰山眾籌)智慧合約DAPP系統開發詳情 | DAPP智慧合約眾籌系統原始碼邏輯規則APP原始碼
- 合約跟單系統開發邏輯功能板塊丨跟單策略系統開發技術方案
- 智慧合約互助公排DAPP系統開發技術案例APP
- 佛薩奇(智慧合約)系統dapp開發技術搭建APP
- 智慧合約DAPP理財模式系統開發技術方案APP模式
- DAPP/FDF智慧合約眾籌迴圈互助遊戲系統開發(詳情及邏輯)丨技術分析APP遊戲
- 闡述量化合約系統開發技術方案丨合約量化系統開發邏輯分析
- DApp智慧合約系統開發APP
- DAPP智慧合約單雙幣質押理財系統開發邏輯分析APP
- DAPP合約代幣燃燒挖礦系統開發丨智慧合約DAPP技術框架APP框架
- FDF智慧合約系統開發|馬蹄鏈DAPP開發搭建技術APP
- 區塊鏈趣步DAPP智慧合約合約系統技術開發詳情區塊鏈APP
- FDF迴圈互助智慧合約系統DAPP開發技術方案APP
- 智慧合約DAPP理財返現系統開發技術方案APP
- Polygon馬蹄鏈(matic)智慧合約DApp開發系統技術GoAPP
- 分投趣系統開發智慧合約丨DAPP分投趣開發功能詳情及邏輯介紹APP
- Dapp 合約代幣系統開發智慧合約APP
- Avater阿凡達泰山眾籌5.0dapp系統開發智慧合約底層邏輯APP
- 星球MetaX智慧合約系統DAPP開發(功能細節)APP
- 九層天塔DAPP系統開發技術|鏈上智慧合約dapp開發方案APP
- 智慧合約Dapp系統開發(方案)APP
- 馬蹄鏈Dapp智慧合約(系統開發)案例丨馬蹄鏈MATIC智慧合約技術開發原理APP
- DEFI借貸協議智慧合約開發技術丨dapp智慧合約系統開發應用詳情協議APP
- FDF/DAPP迴圈互助智慧合約遊戲系統開發技術示例APP遊戲