欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SolidityAPI怎么使用

這篇文章主要講解了“Solidity API怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Solidity API怎么使用”吧!

成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供服務(wù)器托管 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。

區(qū)塊和交易的屬性(Block And Transaction Properties)

用來提供一些區(qū)塊鏈當(dāng)前的信息。

  • block.blockhash(uint blockNumber) returns (bytes32):返回給定區(qū)塊號(hào)的哈希值,只支持最近256個(gè)區(qū)塊,且不包含當(dāng)前區(qū)塊。

  • block.coinbase (address): 當(dāng)前塊礦工的地址。

  • block.difficulty (uint):當(dāng)前塊的難度。

  • block.gaslimit (uint):當(dāng)前塊的gaslimit。

  • block.number (uint):當(dāng)前區(qū)塊的塊號(hào)。

  • block.timestamp (uint): 當(dāng)前塊的Unix時(shí)間戳(從1970/1/1 00:00:00 UTC開始所經(jīng)過的秒數(shù))

  • msg.data (bytes): 完整的調(diào)用數(shù)據(jù)(calldata)。

  • msg.gas (uint): 當(dāng)前還剩的gas。

  • msg.sender (address): 當(dāng)前調(diào)用發(fā)起人的地址。

  • msg.sig (bytes4):調(diào)用數(shù)據(jù)(calldata)的前四個(gè)字節(jié)(例如為:函數(shù)標(biāo)識(shí)符)。

  • msg.value (uint): 這個(gè)消息所附帶的以太幣,單位為wei。

  • now (uint): 當(dāng)前塊的時(shí)間戳(block.timestamp的別名)

  • tx.gasprice (uint) : 交易的gas價(jià)格。

  • tx.origin (address): 交易的發(fā)送者(全調(diào)用鏈)

注意: msg的所有成員值,如msg.sender,msg.value的值可以因?yàn)槊恳淮瓮獠亢瘮?shù)調(diào)用,或庫函數(shù)調(diào)用發(fā)生變化(因?yàn)閙sg就是和調(diào)用相關(guān)的全局變量)。

不應(yīng)該依據(jù) block.timestamp, now 和 block.blockhash來產(chǎn)生一個(gè)隨機(jī)數(shù)(除非你確實(shí)需要這樣做),這幾個(gè)值在一定程度上被礦工影響(比如在賭合約里,不誠實(shí)的礦工可能會(huì)重試去選擇一個(gè)對(duì)自己有利的hash)。

對(duì)于同一個(gè)鏈上連續(xù)的區(qū)塊來說,當(dāng)前區(qū)塊的時(shí)間戳(timestamp)總是會(huì)大于上一個(gè)區(qū)塊的時(shí)間戳。

為了可擴(kuò)展性的原因,你只能查最近256個(gè)塊,所有其它的將返回0.

錯(cuò)誤處理

  • assert(bool condition) 用于判斷內(nèi)部錯(cuò)誤,條件不滿足時(shí)拋出異常

  • require(bool condition): 用于判斷輸入或外部組件錯(cuò)誤,條件不滿足時(shí)拋出異常

  • revert(): 終止執(zhí)行并還原改變的狀態(tài)

數(shù)學(xué)及加密功能

  • addmod(uint x, uint y, uint k) returns (uint): 計(jì)算(x + y) % k,加法支持任意的精度且不會(huì)在2**256處溢出,從0.5.0版本開始斷言k != 0。

  • mulmod(uint x, uint y, uint k) returns (uint): 計(jì)算 (x * y) % k, 乘法支持任意的精度且不會(huì)在2**256處溢出, 從0.5.0版本開始斷言k != 0。

  • keccak256(...) returns (bytes32): 使用以太坊的(Keccak-256)計(jì)算HASH值。緊密打包參數(shù)。

  • sha256(...) returns (bytes32): 使用SHA-256計(jì)算hash值,緊密打包參數(shù)。

  • sha3(...) returns (bytes32): keccak256的別名

  • ripemd160(...) returns (bytes20): 使用RIPEMD-160計(jì)算HASH值。緊密打包參數(shù)。

  • ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address): 通過橢圓曲線簽名來恢復(fù)與公鑰關(guān)聯(lián)的地址,或者在錯(cuò)誤時(shí)返回零。可用于簽名數(shù)據(jù)的校驗(yàn),如果返回結(jié)果是簽名者的公匙地址,那么說明數(shù)據(jù)是正確的。

ecrecover函數(shù)需要四個(gè)參數(shù),需要被簽名數(shù)據(jù)的哈希結(jié)果值,r,s,v分別來自簽名結(jié)果串。 r = signature[0:64] s = signature[64:128] v = signature[128:130] 其中v取出來的值或者是00或01。要使用時(shí),我們先要將其轉(zhuǎn)為整型,再加上27,所以我們將得到27或28。在調(diào)用函數(shù)時(shí)v將填入27或28。

用javascript表達(dá)如下:

    var msg = '0x8CbaC5e4d803bE2A3A5cd3DbE7174504c6DD0c1C'

    var hash = web3.sha3(msg)
    var sig = web3.eth.sign(address, h).slice(2)
    var r = `0x${sig.slice(0, 64)}`
    var s = `0x${sig.slice(64, 128)}`
    var v = web3.toDecimal(sig.slice(128, 130)) + 27

訂閱區(qū)塊鏈技術(shù)專欄可以參考到完整的使用例子。

<!-- [例子](https://ethereum.stackexchange.com/questions/1777/workflow-on-signing-a-string-with-private-key-followed-by-signature-verificatio): -->

緊密打包參數(shù)(tightly packed)意思是說參數(shù)不會(huì)補(bǔ)位,是直接連接在一起的,下面幾個(gè)是相等的。

keccak256("ab", "c")
keccak256("abc")

keccak256(0x616263)  // hex
keccak256(6382179)
keccak256(97, 98, 99)   //ascii

如果需要填充,可以使用顯式類型轉(zhuǎn)換:keccak256("\x00\x12") 與keccak256(uint16(0x12))相同。

注意,常量將使用存儲(chǔ)它們所需的最少字節(jié)數(shù)來打包,例如keccak256(0) == keccak256(uint8(0))和keccak256(0x12345678) == keccak256(uint32(0x12345678))

在私鏈(private blockchain)上運(yùn)行sha256,ripemd160或ecrecover可能會(huì)出現(xiàn)Out-Of-Gas報(bào)錯(cuò)。因?yàn)樗芥湆?shí)現(xiàn)了一種預(yù)編譯合約,合約要在收到第一個(gè)消息后才會(huì)真正存在(雖然他們的合約代碼是硬編碼的)。而向一個(gè)不存在的合約發(fā)送消息,所以才會(huì)導(dǎo)致Out-Of-Gas的問題。一種解決辦法(workaround)是每個(gè)在你真正使用它們之前先發(fā)送1 wei到這些合約上來完成初始化。在官方和測(cè)試鏈上沒有這個(gè)問題。

地址相關(guān)

  • <address>.balance (uint256):

Address的余額,以wei為單位。

  • <address>.transfer(uint256 amount):

發(fā)送給定數(shù)量的ether到某個(gè)地址,以wei為單位。失敗時(shí)拋出異常。

  • <address>.send(uint256 amount) returns (bool):

發(fā)送給定數(shù)量的ether到某個(gè)地址,以wei為單位, 失敗時(shí)返回false。

  • <address>.call(...) returns (bool):

發(fā)起底層的call調(diào)用。失敗時(shí)返回false。

  • <address>.callcode(...) returns (bool):

發(fā)起底層的callcode調(diào)用,失敗時(shí)返回false。 不鼓勵(lì)使用,未來可能會(huì)移除。

  • <address>.delegatecall(...) returns (bool):

發(fā)起底層的delegatecall調(diào)用,失敗時(shí)返回false

更多信息參考地址篇。

警告:send() 執(zhí)行有一些風(fēng)險(xiǎn):如果調(diào)用棧的深度超過1024或gas耗光,交易都會(huì)失敗。因此,為了保證安全,必須檢查send的返回值,如果交易失敗,會(huì)回退以太幣。如果用transfer會(huì)更好。

合約相關(guān)

  • this(當(dāng)前合約的類型): 表示當(dāng)前合約,可以顯式的轉(zhuǎn)換為Address

  • selfdestruct(address recipient): 銷毀當(dāng)前合約,并把它所有資金發(fā)送到給定的地址。

  • suicide(address recipient): selfdestruct的別名

另外,當(dāng)前合約里的所有函數(shù)均可支持調(diào)用,包括當(dāng)前函數(shù)本身。

感謝各位的閱讀,以上就是“Solidity API怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Solidity API怎么使用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

當(dāng)前名稱:SolidityAPI怎么使用
文章分享:http://chinadenli.net/article12/gopjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、面包屑導(dǎo)航網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、域名注冊(cè)、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)