GAS 是一個特別的機制,可以視作程式碼的複雜度計算,複雜度越高則執行費用(fee)越高。
獎勵發動交易及共識機制 - PoW 的獲勝者 - miner。
function onlyOwnerCanDoThis() isOwner { ... }
function aFunctionNeedingEther costsAtLeast(10 ether) { ... }
以太坊的變數設定方式較為嚴格,須經由特定指令;如使用 delete 以重新設定。
uint data;
function f()
{
uint x = data;
delete x;
}
因資料加密需求,提供了多種加密函式,便於程式開發引用。
addmod(uint x, uint y, uint k) returns (uint) //(x + y) % k
mulmod(uint x, uint y, uint k) returns (uint) //(x * y) % k
//雜湊函式
sha3(...) returns (bytes32)
sha256(...) returns (bytes32)
ripemd160(...) returns (bytes20)
//利用橢圓加密復原從簽章反推出當初簽章者的 address
//hash:secp256k1.sign(msg hash, privatekey) 之產物 (Tx hash 被外部帳戶 sign)
//v:signature.復原參數 + 27 (ethereum 橢圓參數)
//r:signature[0-31],s 為 signature[32-63]
ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)
關於地址的相關函式。
address.send(uint wei) returns (bool) //檢查發送過程是否成功
address.balance //回傳 wei
this //這個合約(contract)的地址(address)
msg.sender.send(10 ether); //傳送 10 以太幣,給呼叫者
msg.sender.send(this.balance); //傳送此合約擁有的所有錢,給呼叫者
#### 合約(Contract)函式
//此 contract 的位址
this
//合約自殺時,把合約帳戶裡的餘額退還到指定帳戶
//假如合約中沒有撰寫此方法或其他傳送以太幣的方法,合約的錢永遠拿不回來
selfdestruct(address recipient)
//匿名函式,Fallback Function
//用法類似於其他語言流程控制中的 default
//因為單純送錢的函式沒有名字,也會進入這個函式
function () {}
//加上 payable 描述子的話才能用於 .send()
//要接收其他帳戶傳送貨幣的話必須加上此描述子
//並實作 匿名函式,Fallback Function
function () payable {}
使用時須注意函式以及變數的撰寫格式。
function F() [modifiers...] [contant] returns(T…,) {}
T [public, external] t;
//確定 address type
//明確轉換 (Explicit Conversion)
Contract contract= Contract(address);
contract.function(arg…,); //呼叫方法
contract.send(uint wei); //單純送錢,gas stipend 2300
contract.function.value(uint wei)(arg…,); //呼叫方法順便送錢
contract.function.gas(uint gas)(arg…,); //設定 gas