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

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

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

本文目錄一覽:

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

銀聯(lián)合約pos機

1、合約是什么

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

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

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

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

2、EVM高階語言

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

以下是開發(fā)人員可以用來為以太坊編寫智能合約的不同高級語言。

2.1 Solidity

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

Solidity Documentation - Solidity是用于編寫合同的旗艦以太坊高級語言。

Solidity online realtime compiler

Standardized Contract APIs

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

2.2 Serpent

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

Serpent on the ethereum wiki

Serpent EVM compiler

2.3 LLL

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

LIBLLL in GitHub

Examples of LLL

2.4 Mutan (deprecated)

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

3、開發(fā)一個合約

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

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

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

還可以看這些文檔

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

4、編譯一個合約

可靠性合同的匯編可以通過許多機制來完成。

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編譯器

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

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

此命令返回一個字符串數(shù)組,指示當前可用的編譯器。

注意

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

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

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

或者,您可以通過控制臺在運行時設(shè)置此選項:

> 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 編譯一個簡單的合約

讓我們編譯一段簡單的合約代碼:

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

此契約提供單個方法->乘法,使用正整數(shù)a調(diào)用并返回a* 7,您已準備好使用eth.compile.solidity在geth JS控制臺中編譯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; } }\' }}

注意

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

以下示例顯示如何通過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

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

code

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

info

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

source

源代碼

language

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

languageVersion

合約語言版本

compilerVersion

編譯合約時的solidity編譯器版本

abiDefinition

The Application Binary Interface Definition

userDoc

用戶手冊 NatSpec Doc

developerDoc

開發(fā)者手冊NatSpec Doc .

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

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

contracts = eth.compile.solidity(globalRegistrarSrc)

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

在開始此部分之前,請確保您擁有未鎖定的帳戶以及一些資金。

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

如果你用這兩個工具會更快些: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})

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

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

值得指出的是,此步驟需要您支付執(zhí)行費用, 一旦您的交易成為一個區(qū)塊,您在帳戶上的余額(您在from的字段中作為發(fā)件人)將根據(jù)HPB EVM的GAS規(guī)則減少, 一段時間后,您的交易應(yīng)該出現(xiàn)在一個塊中,確認它所帶來的狀態(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ù)開發(fā)經(jīng)驗,曾參與創(chuàng)建銀聯(lián)大數(shù)據(jù)。主創(chuàng)區(qū)塊鏈教學(xué)視頻節(jié)目《明說》30多期,編寫了《以太坊官網(wǎng)文檔中文版》,并作為主要作者編寫了《區(qū)塊鏈開發(fā)指南》,在中國區(qū)塊鏈社區(qū)以ID“藍蓮花”知名。

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

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

你可能會喜歡:

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