銀聯(lián)合約pos機(jī),HPB EVM合約介紹

 新聞資訊  |   2023-04-20 13:06  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于銀聯(lián)合約pos機(jī),HPB EVM合約介紹的知識(shí),也有很多人為大家解答關(guān)于銀聯(lián)合約pos機(jī)的問(wèn)題,今天pos機(jī)之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、銀聯(lián)合約pos機(jī)

銀聯(lián)合約pos機(jī)

1、合約是什么

契約是代碼(其功能)和數(shù)據(jù)(其狀態(tài))的集合,它位于以太坊區(qū)塊鏈的特定地址。合同帳戶能夠在它們之間傳遞消息以及實(shí)際上進(jìn)行圖靈完整計(jì)算。合同以區(qū)塊鏈為特色,是以太坊特定的二進(jìn)制格式生成,稱為以太坊虛擬機(jī)(EVM)字節(jié)碼,現(xiàn)在HPB芯鏈在上層也用ETH同樣的架構(gòu),這篇文章技術(shù)介紹基本的合約理念!

合約通常用一些高級(jí)語(yǔ)言(如Solidity)編寫,然后編譯成字節(jié)碼以上傳到區(qū)塊鏈中。

還存在其他語(yǔ)言,特別是Serpent和LLL,這篇文檔的以太坊高級(jí)語(yǔ)言部分對(duì)此進(jìn)行了進(jìn)一步描述。

Dapp開(kāi)發(fā)資源列出了集成開(kāi)發(fā)環(huán)境,開(kāi)發(fā)者工具可幫助您使用這些語(yǔ)言,并提供測(cè)試和部署等功能。

2、EVM高階語(yǔ)言

最早的合約以區(qū)塊鏈的形式存在于以太坊特定的二進(jìn)制格式(EVM字節(jié)碼)中,由以太坊虛擬機(jī)(EVM)執(zhí)行。但是,合同通常使用更高級(jí)別的語(yǔ)言編寫,然后使用EVM編譯器編譯為字節(jié)代碼以部署到區(qū)塊鏈。

以下是開(kāi)發(fā)人員可以用來(lái)為以太坊編寫智能合約的不同高級(jí)語(yǔ)言。

2.1 Solidity

Solidity是一種類似于JavaScript的語(yǔ)言,它允許您開(kāi)發(fā)合同并編譯為EVM字節(jié)碼。它目前是EVM開(kāi)發(fā)的旗艦語(yǔ)言,也是最受歡迎的語(yǔ)言。

Solidity Documentation - Solidity是用于編寫合同的旗艦以太坊高級(jí)語(yǔ)言。

Solidity online realtime compiler

Standardized Contract APIs

Useful Dapp Patterns - 代碼片段對(duì)Dapp開(kāi)發(fā)很有用。

2.2 Serpent

Serpent是一種類似于Python的語(yǔ)言,可用于開(kāi)發(fā)合約并編譯為EVM字節(jié)碼。它旨在最大限度地簡(jiǎn)潔,將低級(jí)語(yǔ)言的許多效率優(yōu)勢(shì)與編程風(fēng)格的易用性結(jié)合起來(lái),同時(shí)為合約編程添加特殊的域功能。Serpent使用LLL編譯。

Serpent on the ethereum wiki

Serpent EVM compiler

2.3 LLL

Lisp Like Language (LLL) 是一種類似于匯編的低級(jí)語(yǔ)言。它意味著非常簡(jiǎn)單和簡(jiǎn)約; 基本上只是在EVM中直接編碼的一個(gè)小包裝器。

LIBLLL in GitHub

Examples of LLL

2.4 Mutan (deprecated)

Mutan是由Jeffrey Wilcke設(shè)計(jì)和開(kāi)發(fā)的靜態(tài)類型C語(yǔ)言,它不再維護(hù)。

3、開(kāi)發(fā)一個(gè)合約

讓我們以Hello World合約為例。在以太坊環(huán)境中運(yùn)行,Solidity沒(méi)有明顯的“輸出”串行的方法。

contract HelloWorld { event Print(string out); function { Print("Hello, World!"); }}

此合約將在每次執(zhí)行時(shí)使用參數(shù)“你好,世界!”在打印類型的區(qū)塊鏈上創(chuàng)建一個(gè)日志條目。

還可以看這些文檔

Solidity 文檔里面有過(guò)多的關(guān)于如何編寫合約的代碼示例。

4、編譯一個(gè)合約

可靠性合同的匯編可以通過(guò)許多機(jī)制來(lái)完成。

Using the solc compiler via the command line.

Using web3.eth.compile.solidity in the javascript console provided by geth or eth (This still requires the solc compiler to be installed).

The online Solidity realtime compiler.

The Meteor dapp Cosmo for building solidity contracts.

The Mix IDE.

The Ethereum Wallet.

注意:

更多的關(guān)于編譯的合約代碼在可以這里這里發(fā)現(xiàn)。

4.1 在geth中設(shè)置solidity編譯器

如果啟動(dòng)geth節(jié)點(diǎn),則可以檢查哪些編譯器可用。

> web3.eth.getCompilers;["lll", "solidity", "serpent"]

此命令返回一個(gè)字符串?dāng)?shù)組,指示當(dāng)前可用的編譯器。

注意

這個(gè) solc 編譯器用這個(gè)去編譯 cpp-ethereum. 或者這樣, 看這段例子 build it yourself.

如果您的solc可執(zhí)行文件位于非標(biāo)準(zhǔn)位置,則可以使用--solc標(biāo)志指定solcexecutable的自定義路徑。

$ geth --solc /usr/local/bin/solc

或者,您可以通過(guò)控制臺(tái)在運(yùn)行時(shí)設(shè)置此選項(xiàng):

> admin.setSolc("/usr/local/bin/solc")solc, the solidity compiler commandline interfaceVersion: 0.2.2-02bb315d/.-Darwin/appleclang/JIT linked to libethereum-1.2.0-8007cef0/.-Darwin/appleclang/JITpath: /usr/local/bin/solc

4.2 編譯一個(gè)簡(jiǎn)單的合約

讓我們編譯一段簡(jiǎn)單的合約代碼:

> source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"

此契約提供單個(gè)方法->乘法,使用正整數(shù)a調(diào)用并返回a* 7,您已準(zhǔn)備好使用eth.compile.solidity在geth JS控制臺(tái)中編譯solidity代碼:

> contract = eth.compile.solidity(source).test{ code: \'605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056\', info: { language: \'Solidity\', languageVersion: \'0\', compilerVersion: \'0.9.13\', abiDefinition: [{ constant: false, inputs: [{ name: \'a\', type: \'uint256\' } ], name: \'multiply\', outputs: [{ name: \'d\', type: \'uint256\' } ], type: \'function\' } ], userDoc: { methods: { } }, developerDoc: { methods: { } }, source: \'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }\' }}

注意

編譯器也可以通過(guò)RPC獲得,也可以通過(guò)web3.javasdk連接到任何通過(guò)RPC / IPC連接到geth的瀏覽器Dapp。

以下示例顯示如何通過(guò)JSON-RPC連接geth以使用編譯器。

$ geth --datadir ~/eth/ --loglevel 6 --logtostderr=true --rpc --rpcport 8100 --rpccorsdomain \'*\' --mine console 2>> ~/eth/eth.log$ curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"],"id":1}\' http://127.0.0.1:8100

一個(gè)源的編譯器輸出將為您提供合約對(duì)象,每個(gè)合約對(duì)象代表一個(gè)合約。eth.compile.solidity的實(shí)際返回值是合約名稱到合約對(duì)象對(duì)的映射。由于我們的合約名稱是test,eth.compile.solidity(source).test將為您提供包含以下字段的測(cè)試合同的合同對(duì)象:

code

編譯好的 EVM 字節(jié)碼

info

編譯器的其他元數(shù)據(jù)輸出

source

源代碼

language

編寫合約的語(yǔ)言 (Solidity, Serpent, LLL)

languageVersion

合約語(yǔ)言版本

compilerVersion

編譯合約時(shí)的solidity編譯器版本

abiDefinition

The Application Binary Interface Definition

userDoc

用戶手冊(cè) NatSpec Doc

developerDoc

開(kāi)發(fā)者手冊(cè)NatSpec Doc .

編譯器輸出的結(jié)構(gòu)(代碼和信息)反映了兩種截然不同的部署路徑。已編譯的EVM代碼通過(guò)合約創(chuàng)建事務(wù)發(fā)送到區(qū)塊鏈,而其余(信息)將理想地作為可公開(kāi)驗(yàn)證的元數(shù)據(jù)部署在分散的云上,以補(bǔ)充區(qū)塊鏈上的代碼。

如果您的源碼包含多個(gè)合同,則輸出將包含每個(gè)合同的條目,可以使用合同名稱作為屬性名稱檢索相應(yīng)的合同信息對(duì)象。您可以通過(guò)檢查最新的GlobalRegistrar代碼來(lái)嘗試此操作:

contracts = eth.compile.solidity(globalRegistrarSrc)

5、創(chuàng)建和部署一個(gè)合約

在開(kāi)始此部分之前,請(qǐng)確保您擁有未鎖定的帳戶以及一些資金。

現(xiàn)在,您將區(qū)塊鏈上的合約創(chuàng)建為空地址,并將上一節(jié)中的EVM代碼作為數(shù)據(jù)。

如果你用這兩個(gè)工具會(huì)更快些:online Solidity realtime compiler 或者 Mix IDE

var primaryaddress = eth.accounts[0]var abi = [{ constant: false, inputs: { name: \'a\', type: \'uint256\' } }]var MyContract = eth.contract(abi)var contract = MyContract.new(arg1, arg2, ..., {from: primaryAddress, data: evmByteCodeFromPreviousSection})

所有二進(jìn)制數(shù)據(jù)都以十六進(jìn)制形式序列化。十六進(jìn)制字符串的前綴始終為 0x。

請(qǐng)注意,arg1,arg2,...是合同構(gòu)造函數(shù)的參數(shù),以防它接受任何參數(shù)。如果契約不需要任何構(gòu)造函數(shù)參數(shù),則可以省略這些參數(shù)。

值得指出的是,此步驟需要您支付執(zhí)行費(fèi)用, 一旦您的交易成為一個(gè)區(qū)塊,您在帳戶上的余額(您在from的字段中作為發(fā)件人)將根據(jù)HPB EVM的GAS規(guī)則減少, 一段時(shí)間后,您的交易應(yīng)該出現(xiàn)在一個(gè)塊中,確認(rèn)它所帶來(lái)的狀態(tài)是一致的,你的合同現(xiàn)在住在區(qū)塊鏈上。

執(zhí)行相同操作的異步方式如下所示:

MyContract.new([arg1, arg2, ...,]{from: primaryAccount, data: evmCode}, function(err, contract) { if (!err && contract.address) console.log(contract.address);});

續(xù)

本文首發(fā)于汪曉明博

http://wangxiaoming.com/

HPB 芯鏈官網(wǎng)

http://www.hpb.io/

汪曉明

HPB芯鏈創(chuàng)始人,巴比特專欄作家。十余年金融大數(shù)據(jù)、區(qū)塊鏈技術(shù)開(kāi)發(fā)經(jīng)驗(yàn),曾參與創(chuàng)建銀聯(lián)大數(shù)據(jù)。主創(chuàng)區(qū)塊鏈教學(xué)視頻節(jié)目《明說(shuō)》30多期,編寫了《以太坊官網(wǎng)文檔中文版》,并作為主要作者編寫了《區(qū)塊鏈開(kāi)發(fā)指南》,在中國(guó)區(qū)塊鏈社區(qū)以ID“藍(lán)蓮花”知名。

以上就是關(guān)于銀聯(lián)合約pos機(jī),HPB EVM合約介紹的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于銀聯(lián)合約pos機(jī)的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://www.tjfsxbj.com/news/21215.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。