銀聯合約pos機,HPB EVM合約介紹

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

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

本文目錄一覽:

1、銀聯合約pos機

銀聯合約pos機

1、合約是什么

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

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

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

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

2、EVM高階語言

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

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

2.1 Solidity

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

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

Solidity online realtime compiler

Standardized Contract APIs

Useful Dapp Patterns - 代碼片段對Dapp開發很有用。

2.2 Serpent

Serpent是一種類似于Python的語言,可用于開發合約并編譯為EVM字節碼。它旨在最大限度地簡潔,將低級語言的許多效率優勢與編程風格的易用性結合起來,同時為合約編程添加特殊的域功能。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設計和開發的靜態類型C語言,它不再維護。

3、開發一個合約

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

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

此合約將在每次執行時使用參數“你好,世界!”在打印類型的區塊鏈上創建一個日志條目。

還可以看這些文檔

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

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.

注意:

更多的關于編譯的合約代碼在可以這里這里發現。

4.1 在geth中設置solidity編譯器

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

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

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

注意

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

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

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

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

> 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; } }"

此契約提供單個方法->乘法,使用正整數a調用并返回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 字節碼

info

編譯器的其他元數據輸出

source

源代碼

language

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

languageVersion

合約語言版本

compilerVersion

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

abiDefinition

The Application Binary Interface Definition

userDoc

用戶手冊 NatSpec Doc

developerDoc

開發者手冊NatSpec Doc .

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

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

contracts = eth.compile.solidity(globalRegistrarSrc)

5、創建和部署一個合約

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

現在,您將區塊鏈上的合約創建為空地址,并將上一節中的EVM代碼作為數據。

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

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

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

值得指出的是,此步驟需要您支付執行費用, 一旦您的交易成為一個區塊,您在帳戶上的余額(您在from的字段中作為發件人)將根據HPB EVM的GAS規則減少, 一段時間后,您的交易應該出現在一個塊中,確認它所帶來的狀態是一致的,你的合同現在住在區塊鏈上。

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

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

本文首發于汪曉明博

http://wangxiaoming.com/

HPB 芯鏈官網

http://www.hpb.io/

汪曉明

HPB芯鏈創始人,巴比特專欄作家。十余年金融大數據、區塊鏈技術開發經驗,曾參與創建銀聯大數據。主創區塊鏈教學視頻節目《明說》30多期,編寫了《以太坊官網文檔中文版》,并作為主要作者編寫了《區塊鏈開發指南》,在中國區塊鏈社區以ID“藍蓮花”知名。

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

轉發請帶上網址:http://www.www690aa.com/news/21215.html

你可能會喜歡:

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