diff --git a/Changelog.md b/Changelog.md index 06a52db6..7b5d8360 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,12 +1,13 @@ [//]: # (SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception) -### 0.0.6 (2020-03-xx) +### 0.0.6 (2020-03-31) Language Features: * Solidity: * Support abi.encode and abi.encodePacked. (excluding array type) * Support fallback keyword. (solidity spec >= 0.6.0) + * Support struct decleration. (with limited members’ types) * Yul: * Support tuple usage. * return, declaration, assignment @@ -27,8 +28,8 @@ Compiler Features: * Throw error messages for unimplemented features: * Redefine constructor or fallback function. * Add color on/off option. -* Add command-line action options for distinguish generate ewasm could be deployed on chain or normal case. - * `-deploy=Chain`: Ewasm vm (Hera) not support keccak256 yet, so for workaround use sha256 instead. (Default) +* Add command-line action options for distinguishing generate ewasm could be deployed on-chain or normal case. + * `-deploy=Chain`: Ewasm VM (Hera) not support keccak256 yet, so for workaround use sha256 instead. (Default) * `-deploy=Normal`: Normal behavior. * Add command-line action options for generating object files. * `-action=EmitAssembly`: Emit a .s file. @@ -45,7 +46,7 @@ Bugfixes: * Add ImplicitCastExpr on return statement. * Fix mismatch EEI functions `blockhash`. -* Keep full event signature as topic 0 field when emit event. +* Keep full event signature as topic 0 field when emitting event. * Fix built-in function minor issues: * `iszero`, `shl`, `shr`, `sar` * Remove unexpected message when `soll -action=EmitFuncSig`. @@ -106,12 +107,12 @@ Language Features: Compiler Features: -* Add command-line version option for checking current SOLL version. +* Add command-line version option for checking the current SOLL version. * `-version` * Add command-line language options for supporting Yul input file. * `-lang=Sol`: Input file is written in Solidity. (Default) * `-lang=Yul`: Input file is written in Yul. -* Add testing framework for unittest and regrassion test. +* Add testing framework for unittest and regression test. * Integrate Solidity compilation test and libyul test from ethereum/solidity. @@ -119,7 +120,7 @@ Compiler Features: Language Features: -* Support partial builtin global variable +* Support partial built-in global variable * msg.sender, msg.value, msg.data. * tx.gasprice, tx.origin. * block.coinbase, block.difficulty, block.gaslimit, block.number, block.timestamp. @@ -165,7 +166,7 @@ Compiler Features: Bugfixes: -* Fix a precedence issue related to binary operator. +* Fix a precedence issue related to the binary operator. ### 0.0.1 (2019-07-31) diff --git a/README.md b/README.md index 66709ff3..0b7fffde 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # 1. Introduction **SOLL** is a new compiler for generating [Ewasm](https://github.com/ewasm) (Ethereum flavored WebAssembly) files from Solidity and Yul. -To support developers as many as possible, we design projects to not only support more smart contract programming languages, such as Rust and C++, but also support various VMs, such as Ewasm VM and evm. To achieve this goal, in the very first step, we develop SOLL, a compiler for Solidity-based smart contract running on Ewasm VM. +To support developers as many as possible, we design projects to not only support more smart contract programming languages, such as Rust and C++ but also support various VMs, such as Ewasm VM and evm. To achieve this goal, in the very first step, we develop SOLL, a compiler for Solidity-based smart contracts running on Ewasm VM. For application users, please refer to this document. You will know how to use SOLL to generate Ewasm bytecode from your Solidity smart contract or Yul language, and then deploy the Ewasm bytecode to Ethereum Ewasm TestNet. @@ -11,7 +11,7 @@ For developers, we provide another document for explaining the design of SOLL an # 2. Current Status and Limitations -SOLL is still in early stage, and we’ve not fully supported Solidity and Yul. Please check features we’ve done and limitations in the following documents. +SOLL is still in an early stage, and we’ve not fully supported Solidity and Yul. Please check the features we’ve done and limitations in the following documents. * [Feature Guide for Solidity](doc/guides/FeatureGuideForSolidity.md) * [Feature Guide for Yul](doc/guides/FeatureGuideForYul.md) @@ -21,7 +21,7 @@ And SOLL integrates Solidity and Yul test contracts from [ethereum/solidity](htt Here is the pass rate of both language: -Solidity test suite (Total 80 tests from compilationTests): +The solidity test suite (Total 80 tests from compilation tests): ```bash Expected Passes : 27 # Solidity has 80 testing contract, and SOLL can pass 27. Unsupported Tests : 53 # Unimplemented by SOLL @@ -37,7 +37,7 @@ Pass Rate: 79% # 3. Getting Started -To get started with our demonstration, you will need prepare two components at first. +To get started with our demonstration, you will need to prepare two components at first. - Pre-install **Docker** and pull our [docker image](https://hub.docker.com/r/secondstate/soll) > *We provide an image include build and execute environment (recommend). @@ -76,64 +76,195 @@ Build SOLL(we use cmake with llvm library) (docker) $ cmake .. && make ``` -## 3.4 Compile an ERC20 smart contract +## 3.4 Tutorial: Compile ERC20 contracts and deploy them on Ewasm testnet + +**Ewasm TestNet is unavailable now**. +Our original tutorial will deploy Ewasm bytecode on the official TestNet. +Unfortunately, the **Ewasm TestNet is unavailable now**. +We’ve moved the original tutorial into [Deploy an ERC20 smart contract to Ewasm official TestNet](doc/guides/EwasmTestNetDeprecated.md). + +For demonstration propose, we provide another Ewasm TestNet which is launched by our DevChain. + +> **[DevChain](https://github.com/second-state/devchain/tree/devchain)** +> The Second State DevChain features a powerful and easy-to-use virtual machine that can quickly get you started with smart contracts and DApp development. Our devchain supports Ewasm by [hera](https://github.com/ewasm/hera) through EVMC interface. + +### 3.4.1 Compile an ERC20 smart contract + +SOLL supports two frontend languages including Solidity and Yul. You can use SOLL to generate Ewasm bytecode(.wasm) directly. + +#### 3.4.1-1 For Solidity contracts Create your smart contract files by copying from our demonstration contract "0-0-3.sol". +And execute SOLL to generate Ewasm bytecode(.wasm). + ```bash (docker) $ cd ~ -(docker) $ cp ~/soll/doc/examples/0-0-3.sol ~/contract.sol +(docker) $ cp ~/soll/doc/examples/0-0-3.sol ~/0-0-3.sol +(docker) $ ~/soll/build/tools/soll/soll 0-0-3.sol +# The output bytecode is loacted at ~/0-0-3.wasm ``` -Execute SOLL to generate Ewasm bytecode(.wasm). +We will use "0-0-3.wasm" in the next section to deploy it to Ewasm TestNet. + +#### 3.4.1-2 For Yul contracts + +Create your smart contract files by copying from our demonstration contract "0-0-6.yul". +And execute SOLL to generate Ewasm bytecode(.wasm). + ```bash -(docker) $ ~/soll/build/tools/soll/soll contract.sol +(docker) $ cd ~ +(docker) $ cp ~/soll/doc/examples/0-0-6.yul ~/0-0-6.yul +(docker) $ ~/soll/build/tools/soll/soll -lang=Yul 0-0-6.yul +# The output bytecode is loacted at ~/0-0-6.wasm ``` -We will use "contract.wasm" in the next section to deploy it to Ewasm TestNet. +We will use "0-0-6.wasm" in the next section to deploy it to Ewasm TestNet. + +### 3.4.2 Convert Ewasm bytecodes into text format. -## 3.5 Deploy an ERC20 smart contract to Ewasm TestNet -> **Ewasm TestNet is unavailable now**. -> So we provid other workaround test demonstration in [Developer Guide](doc/guides/DevGuide.md#deploy-and-execute-ewasm-on-devchain). +#### 3.4.2-1 Solidity Part: 0-0-3.sol -### **Step 1: Convert Wasm files to Hex Code files.** +```bash +(soll docker) $ xxd -p ~/soll/doc/examples/0-0-3.wasm | tr -d $'\n' +``` +The result should be the same as the following content. (**This will be used later**) + +``` +0061736d0100000001270760027f7f0060000060017f0060037f7f7f0060057f7e7e7e7e0060047e7f7f7f017f6000017e02c7010908657468657265756d0c67657443616c6c56616c7565000208657468657265756d0c73746f7261676553746f7265000008657468657265756d0967657443616c6c6572000208657468657265756d0a6765744761734c656674000608657468657265756d0a63616c6c537461746963000508657468657265756d0e72657475726e44617461436f7079000308657468657265756d0b73746f726167654c6f6164000008657468657265756d06726576657274000008657468657265756d0666696e697368000003040304010105030100020608017f0141e0ad040b071102066d656d6f72790200046d61696e000b0abf0d038d0300200020044228884280fe03832004421888428080fc0783200442088842808080f80f8320044208864280808080f01f832004421886428080808080e03f83200442288642808080808080c0ff00832004423886200442388884848484848484370300200041186a20014228884280fe03832001421888428080fc0783200142088842808080f80f8320014208864280808080f01f832001421886428080808080e03f83200142288642808080808080c0ff00832001423886848484848484200142388884370300200020024228884280fe03832002421888428080fc0783200242088842808080f80f8320024208864280808080f01f832002421886428080808080e03f83200242288642808080808080c0ff00832002423886848484848484200242388884370310200020034228884280fe03832003421888428080fc0783200342088842808080f80f8320034208864280808080f01f832003421886428080808080e03f83200342288642808080808080c0ff008320034238868484848484842003423888843703080ba00a02067f087e23004190026b220024002000220141c8016a100020012903c801200141d0016a29030084500440200041606a220322022400200241606a220422052400200241786a4280808080d0a0fdf000370300200241706a4200370300200241686a420037030020044200370300200041786a4200370300200041706a4200370300200041686a4200370300200342003703002003200410012005220041606a2202220324002000416c6a41edde013b0100200041686a220441e5dc91aa06360200200242c5a48d928386d5b7eb00370300200041786a220220022903004280808080808080801c84220637030020042903002107200041706a29030021082003220041606a220322022400200241606a220422052400200241786a2006370300200241706a2008370300200241686a2007370300200442c5a48d928386d5b7eb00370300200041786a42808080808080808001370300200041706a4200370300200041686a4200370300200342003703002003200410012005220041606a220222032400200041626a41c4003a0000200241c5a8013b0100200041786a220420042903004280808080808080800684220637030020022903002107200041686a2903002108200041706a29030021092003220041606a220322022400200241606a220422052400200241786a2006370300200241706a2009370300200241686a200837030020042007370300200041786a42808080808080808002370300200041706a4200370300200041686a4200370300200342003703002003200410012005220041606a22022203240020021002200141a8016a4200200229030022064220862006422088200041686a290300220642208684200041706a350200422086200642208884100920014188016a20012903a801200141b0016a290300200141b8016a3502004200100920014190016a290300210620014198016a2903002107200141a0016a290300210820012903880121092003220041406a220222032400200041786a42808080808080808003370300200041706a4200370300200041686a4200370300200041606a4200370300200041586a2008370300200041506a2007370300200041486a2006370300200220093703002001420037038002200142003703f801200142808080103e0288021003200141f8016a200241c00010041a200141d8016a410041201005200141e8006a20012903d801200141e0016a290300200141e8016a290300200141f0016a290300100920014180016a2903002106200141f8006a2903002107200141f0006a2903002108200129036821092003220041606a220322022400200241606a220422052400200041786a4200370300200041706a4200370300200041686a420037030020034200370300200320041006200141c8006a2004290300200241686a290300200241706a290300200241786a2903001009200141286a20092008200720061009200141306a2903002106200141386a2903002107200141406b290300210820012903282109200141086a2001290348200141d0006a290300200141d8006a290300200141e0006a2903001009200141106a290300210a200141186a290300210b200141206a290300210c2001290308210d2005220041606a220322022400200241606a22042400200241786a200c370300200241706a200b370300200241686a200a3703002004200d370300200041786a2008370300200041706a2007370300200041686a20063703002003200937030020032004100120014190026a24000f0b41800841171007000b0c00100a41970841c42510080b0be32501004180080bdb2546756e6374696f6e206973206e6f742070617961626c650061736d0100000001460b60027f7f0060017f0060037f7f7f0060000060077f7f7f7f7f7f7f0060047f7e7e7e0060057f7e7e7e7e0060077e7e7e7e7e7e7e006000017f60047e7f7f7f017f6000017e0289020c08657468657265756d0c67657443616c6c56616c7565000108657468657265756d0a6765744761734c656674000a08657468657265756d0a63616c6c537461746963000908657468657265756d0e72657475726e44617461436f7079000208657468657265756d0b73746f726167654c6f6164000008657468657265756d06726576657274000008657468657265756d0967657443616c6c6572000108657468657265756d0c73746f7261676553746f7265000008657468657265756d036c6f67000408657468657265756d0f67657443616c6c4461746153697a65000808657468657265756d0c63616c6c44617461436f7079000208657468657265756d0666696e69736800000305040605070305030100020608017f0141f088040b071102066d656d6f72790200046d61696e000f0ac321048d0300200020044228884280fe03832004421888428080fc0783200442088842808080f80f8320044208864280808080f01f832004421886428080808080e03f83200442288642808080808080c0ff00832004423886200442388884848484848484370300200041186a20014228884280fe03832001421888428080fc0783200142088842808080f80f8320014208864280808080f01f832001421886428080808080e03f83200142288642808080808080c0ff00832001423886848484848484200142388884370300200020024228884280fe03832002421888428080fc0783200242088842808080f80f8320024208864280808080f01f832002421886428080808080e03f83200242288642808080808080c0ff00832002423886848484848484200242388884370310200020034228884280fe03832003421888428080fc0783200342088842808080f80f8320034208864280808080f01f832003421886428080808080e03f83200342288642808080808080c0ff008320034238868484848484842003423888843703080baf0402057f017e230041d0016b22052400200522044188016a100020042903880120044190016a29030084500440200441e8006a20012002200342ffffffff0f834200100c200441f0006a2903002101200441f8006a290300210220044180016a290300210320042903682109200541406a220622072400200541786a42808080808080808003370300200541706a4200370300200541686a4200370300200541606a4200370300200541586a2003370300200541506a2002370300200541486a200137030020062009370300200442003703c001200442003703b801200442808080103e02c8011001200441b8016a200641c00010021a20044198016a410041201003200441c8006a200429039801200441a0016a290300200441a8016a290300200441b0016a290300100c200441286a2004290348200441d0006a290300200441d8006a290300200441e0006a290300100c200441306a2903002101200441386a2903002102200441406b2903002103200429032821092007220541606a220722062400200641606a22082400200541786a2003370300200541706a2002370300200541686a200137030020072009370300200720081004200441086a2008290300200641686a290300200641706a290300200641786a290300100c200441106a2903002101200441186a290300210220042903082103200041186a200441206a290300370300200020023703102000200137030820002003370300200441d0016a24000f0b41d90841171005000bec1502077f0b7e230041d0056b22082400200822074188056a1000024002400240024020072903880520074190056a29030084500440200841606a2209220b240020091006200741e8046a42002009290300220e422086200e422088200841686a290300220e42208684200841706a350200422086200e42208884100c200741c8046a20072903e804200741f0046a290300200741f8046a3502004200100c200741d0046a290300210e200741d8046a290300210f200741e0046a290300211020072903c8042112200b220841406a2209220a2400200841786a42808080808080808003370300200841706a4200370300200841686a4200370300200841606a4200370300200841586a2010370300200841506a200f370300200841486a200e37030020092012370300200742003703c005200742003703b805200742808080103e02c8051001200741b8056a200941c00010021a20074198056a410041201003200741a8046a200729039805200741a0056a220b290300200741a8056a220c290300200741b0056a220d290300100c200741c0046a2903002111200741b8046a2903002113200741b0046a290300211420072903a8042115200a220841606a2209220a24002009100620074188046a42002009290300220e422086200e422088200841686a290300220e42208684200841706a350200422086200e42208884100c200741e8036a20072903880420074190046a29030020074198046a3502004200100c200741f0036a290300210e200741f8036a290300210f20074180046a290300211020072903e8032112200a220841406a2209220a2400200841786a42808080808080808003370300200841706a4200370300200841686a4200370300200841606a4200370300200841586a2010370300200841506a200f370300200841486a200e37030020092012370300200742003703c005200742003703b805200742808080103e02c8051001200741b8056a200941c00010021a20074198056a410041201003200741c8036a200729039805200b290300200c290300200d290300100c200741a8036a20072903c803200741d0036a290300200741d8036a290300200741e0036a290300100c200741b0036a290300210e200741b8036a290300210f200741c0036a290300211020072903a8032112200a220841606a220a22092400200941606a220c220d2400200841786a2010370300200841706a200f370300200841686a200e370300200a2012370300200a200c100420074188036a200c290300200941686a290300200941706a290300200941786a290300100c200741a0036a290300210e20074198036a290300210f20074190036a2903002110200729038803211220074198056a1000200729039805200b290300844200520d0120122003542208201020045420042010511b2209200f200554220b200e2006542006200e511b2005200f852006200e8584501b0d02200741e8026a2015201420132011100c200741f0026a2903002111200741f8026a290300211320074180036a290300211420072903e8022115200741c8026a201220037d201020047d2008ad7d200f20057d220f2009ad22107d200e20067d200bad7d200f201054ad7d100c200741d0026a290300210e200741d8026a290300210f200741e0026a290300211020072903c8022112200d220841606a220b22092400200941606a220a220c2400200941786a2010370300200941706a200f370300200941686a200e370300200a2012370300200841786a2014370300200841706a2013370300200841686a2011370300200b2015370300200b200a1007200741a8026a20002001200242ffffffff0f834200100c200741b0026a2903002110200741b8026a2903002112200741c0026a290300210020072903a8022101200c220841406a2209220a2400200841786a42808080808080808003370300200841706a4200370300200841686a4200370300200841606a4200370300200841586a2000370300200841506a2012370300200841486a201037030020092001370300200742003703c005200742003703b805200742808080103e02c8051001200741b8056a200941c00010021a20074198056a41004120100320074188026a200729039805200741a0056a220b290300200741a8056a220c290300200741b0056a220d290300100c200741a0026a290300211420074198026a290300211520074190026a29030021162007290388022117200a220841406a2209220a2400200841786a42808080808080808003370300200841706a4200370300200841686a4200370300200841606a4200370300200841586a2000370300200841506a2012370300200841486a201037030020092001370300200742003703c005200742003703b805200742808080103e02c8051001200741b8056a200941c00010021a20074198056a410041201003200741e8016a200729039805200b290300200c290300200d290300100c200741c8016a20072903e801200741f0016a290300200741f8016a29030020074180026a290300100c200741d0016a290300210e200741d8016a290300210f200741e0016a290300210220072903c8012111200a220841606a220a22092400200941606a220c220d2400200841786a2002370300200841706a200f370300200841686a200e370300200a2011370300200a200c1004200741a8016a200c290300200941686a290300200941706a290300200941786a290300100c200741c0016a290300210e200741b8016a290300210f200741b0016a290300210220072903a801211120074198056a1000200729039805200b290300844200520d03200320117c221820115422082008ad200220047c7c221320025420022013511b22082005200f7c22112008ad7c2202200f542002201154ad2011200f54ad2006200e7c7c7c2211200e54200e2011511b2002200f85200e20118584501b0d0420074188016a2017201620152014100c20074190016a290300210e20074198016a290300210f200741a0016a29030021142007290388012115200741e8006a2018201320022011100c200741f0006a2903002102200741f8006a290300211120074180016a290300211320072903682116200d220841606a220b22092400200941606a220a220c2400200941786a2013370300200941706a2011370300200941686a2002370300200a2016370300200841786a2014370300200841706a200f370300200841686a200e370300200b2015370300200b200a1007200c220841606a2209220b240020091006200741c8006a42002009290300220e422086200e422088200841686a290300220e42208684200841706a350200422086200e42208884100c200741d0006a290300210e200741d8006a350200210f20072903482102200b220841606a2209220b2400200741286a2002200e200f4200100c200741306a290300210e200741386a290300210f20072903282102200841786a200741406b290300370300200841706a200f370300200841686a200e37030020092002370300200b220841606a220b220a2400200841786a2000370300200841706a2012370300200841686a2010370300200b2001370300200a220841606a220a2400200741086a2003200420052006100c200741106a2903002106200741186a290300210420072903082105200841786a200741206a290300370300200841706a2004370300200841686a2006370300200a2005370300200a412041034180082009200b41001008200741d0056a24000f0b41d90841171005000b41d90841171005000b41bb08411e1005000b41d90841171005000b41a008411b1005000b920402047f047e230041a0016b2200210120002400024002400240100941034d0d00200041706a220022022400200041004104100a2000280200220041a98bf0dc7b460d01200041f0c08a8c03470d002002220041606a220222032400200241044120100a200141406b2002290300200041686a290300200041706a290300200041786a290300100c200141206a2001290340200141c8006a290300200141d0006a350200100d20012001290320200141286a290300200141306a290300200141386a290300100c200141086a2903002104200141106a2903002105200141186a2903002106200129030021072003220041606a22022400200041786a2006370300200041706a2005370300200041686a20043703002002200737030020024120100b0c020b41004100100b0c010b2002220041406a2202220324002002410441c000100a20014180016a2002290300200041486a290300200041506a290300200041586a290300100c200141e0006a200041606a290300200041686a290300200041706a290300200041786a290300100c20012903800120014188016a29030020014190016a3502002001290360200141e8006a290300200141f0006a290300200141f8006a290300100e2003220041606a22022400200041786a42808080808080808001370300200041706a4200370300200041686a42003703002002420037030020024120100b0b200141a0016a24000b0b7701004180080b70ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef536166654d6174683a206164646974696f6e206f766572666c6f77536166654d6174683a207375627472616374696f6e206f766572666c6f7746756e6374696f6e206973206e6f742070617961626c65 +``` -To deploy our smart contract to TestNet, we need to convert the WASM files to Hex Code files. +#### 3.4.2-2 Yul Part: 0-0-6.yul ```bash -(docker) $ xxd -p contract.wasm | tr -d $'\n' +(soll docker) $ xxd -p ~/soll/doc/examples/0-0-6.wasm | tr -d $'\n' +``` +The result should be the same as the following content. (**This will be used later**) +``` +0061736d0100000001270760027f7f0060000060017f0060037f7f7f0060057f7e7e7e7e0060047e7f7f7f017f6000017e02c7010908657468657265756d0c67657443616c6c56616c7565000208657468657265756d06726576657274000008657468657265756d0a6765744761734c656674000608657468657265756d0a63616c6c537461746963000508657468657265756d0e72657475726e44617461436f7079000308657468657265756d0b73746f726167654c6f6164000008657468657265756d0666696e697368000008657468657265756d0967657443616c6c6572000208657468657265756d0c73746f7261676553746f7265000003040304010105030100020608017f014190e0040b071102066d656d6f72790200046d61696e000b0afa0e038d0300200020044228884280fe03832004421888428080fc0783200442088842808080f80f8320044208864280808080f01f832004421886428080808080e03f83200442288642808080808080c0ff00832004423886200442388884848484848484370300200041186a20014228884280fe03832001421888428080fc0783200142088842808080f80f8320014208864280808080f01f832001421886428080808080e03f83200142288642808080808080c0ff00832001423886848484848484200142388884370300200020024228884280fe03832002421888428080fc0783200242088842808080f80f8320024208864280808080f01f832002421886428080808080e03f83200242288642808080808080c0ff00832002423886848484848484200242388884370310200020034228884280fe03832003421888428080fc0783200342088842808080f80f8320034208864280808080f01f832003421886428080808080e03f83200342288642808080808080c0ff008320034238868484848484842003423888843703080be30b02057f087e23004180036b220121002001240041e8e004428080808080808080807f37030041e0e004420037030041d8e004420037030041d0e004420037030041800829030042df005641880829030022054200522005501b419008290300220642005241980829030022054200522005501b2005200684501b4504404198084200370300419008420037030041880842003703004180084280013703000b2001220241706a2201240020011000200041c8016a420042002001290300200241786a290300100920002903c801200041d0016a29030084504504404190e004410010010b200041f8026a22014200370300200042003703f002200042003703e802200042003703e002200041e0026a200041c0026a100520004198026a4280808080d0a0fdf000370300200041b8026a4200370300200042003703900220004200370388022000420037038002200042003703b002200042003703a802200042003703a002200041a0026a20004180026a100820014200370300200042003703f002200042003703e802200042003703e002200041e0026a200041c0026a1005200041a8016a20002903c002200041c8026a290300200041d0026a290300200041d8026a2903001009200041c0016a2903002106200041b8016a2903002109200041b0016a290300210a20002903a801210b200041e8016a100720004188016a420020002903e80122054220862005422088200041f0016a290300220542208684200041f8016a3502004220862005422088841009200041e8006a20002903880120004190016a29030020004198016a3502004200100941a8e00420004180016a29030037030041a0e004200041f8006a2903003703004198e004200041f0006a2903003703004190e004200029036837030002404180082903002207421f564188082903002205420052220120055022021b419008290300220842005241980829030022054200522005501b220320052008845022041b45044041c8e0044280808080808080800137030041c0e004420037030041b8e004420037030041b0e004420037030041980842003703004190084200370300418808420037030041800842c0003703000c010b41c8e0044280808080808080800137030041c0e004420037030041b8e004420037030041b0e00442003703002007423f56200120021b200320041b0d0041980842003703004190084200370300418808420037030041800842e0003703000b200042003703c802200042003703c002200042808080103e02d0021002200041c0026a4190e00441c00010031a200041e0026a410041201004200041c8006a20002903e002200041e8026a290300200041f0026a290300200041f8026a22012903001009200041286a2000290348200041d0006a290300200041d8006a290300200041e0006a29030010092001200041406b29030022053703002000200041386a29030022083703f0022000200041306a29030022073703e80220002000290328220c3703e002200041e0026a200041c0026a1005200041086a200b200a200920061009200041b8026a200537030020004198026a200041206a290300370300200020083703b002200020073703a8022000200c3703a0022000200041186a290300370390022000200041106a290300370388022000200029030837038002200041a0026a20004180026a100841800829030042e8d7005641880829030022054200522005501b419008290300220642005241980829030022054200522005501b2005200684501b4504404198084200370300419008420037030041880842003703004180084280d8003703000b4190e00441003a000041012101034020014190e0046a200141a0086a2d00003a0000200141e8d70046450440200141016a21010c010b0b41800829030042e8d7005641880829030022054200522005501b419008290300220642005241980829030022054200522005501b2005200684501b4504404198084200370300419008420037030041880842003703004180084280d8003703000b4190e00441e9d700100620004180036a24000b0400100a0b0bf057010041a1080be85761736d0100000001400a60027f7f0060057f7e7e7e7e0060000060017f0060037f7f7f0060077f7f7f7f7f7f7f0060087e7e7e7e7e7e7e7e006000017f60047e7f7f7f017f6000017e0289020c08657468657265756d0f67657443616c6c4461746153697a65000708657468657265756d0c63616c6c44617461436f7079000408657468657265756d0c67657443616c6c56616c7565000308657468657265756d06726576657274000008657468657265756d0a6765744761734c656674000908657468657265756d0a63616c6c537461746963000808657468657265756d0e72657475726e44617461436f7079000408657468657265756d0b73746f726167654c6f6164000008657468657265756d0666696e697368000008657468657265756d0967657443616c6c6572000308657468657265756d0c73746f7261676553746f7265000008657468657265756d036c6f67000503070601020601010205030100020608017f0141a088040b071102066d656d6f72790200046d61696e00110ae554068d0300200020044228884280fe03832004421888428080fc0783200442088842808080f80f8320044208864280808080f01f832004421886428080808080e03f83200442288642808080808080c0ff00832004423886200442388884848484848484370300200041186a20014228884280fe03832001421888428080fc0783200142088842808080f80f8320014208864280808080f01f832001421886428080808080e03f83200142288642808080808080c0ff00832001423886848484848484200142388884370300200020024228884280fe03832002421888428080fc0783200242088842808080f80f8320024208864280808080f01f832002421886428080808080e03f83200242288642808080808080c0ff00832002423886848484848484200242388884370310200020034228884280fe03832003421888428080fc0783200342088842808080f80f8320034208864280808080f01f832003421886428080808080e03f83200342288642808080808080c0ff008320034238868484848484842003423888843703080ba61a02057f0e7e230041e0046b220121002001240041f88804428080808080808080807f37030041f08804420037030041e88804420037030041e08804420037030041800829030042df005641880829030022054200522005501b419008290300220642005241980829030022054200522005501b2005200684501b4504404198084200370300419008420037030041880842003703004180084280013703000b024010004104490d00200141606a220222032400200241004120100120004180046a2002290300200141686a290300200141706a290300200141786a290300100c0240024002400240200028029c04220141bbb996c87a470440200141b184828507470d052003220241706a2201240020011002200041a0026a420042002001290300200241786a290300100c20002903a002200041a8026a290300845045044041a08804410010030b1000ad2205427c7c2206421f5620062005542201ad427f7c220542005220055022021b2001410020021b2201ad2205427f7c2206420052200620055a20062005541b20011b45044041a08804410010030b200041c0046a41044120100120004180026a20002903c004200041c8046a290300200041d0046a290300200041d8046a290300100c20004188026a29030021062000290380022107410020004190026a290300220542808080801054410020004198026a2903002208501b200542808080801085200884501b45044041a08804410010030b200041e0016a20072006200542ffffffff0f834200100c41b88804200041f8016a29030037030041b08804200041f0016a29030037030041a88804200041e8016a29030037030041a0880420002903e0013703004180082903002207421f564188082903002205420052220120055022021b419008290300220642005241980829030022054200522005501b220320052006845022041b0d0141d888044280808080808080800137030041d08804420037030041c88804420037030041c08804420037030041980842003703004190084200370300418808420037030041800842c0003703000c020b2003220241706a2201240020011002200041e0036a420042002001290300200241786a290300100c20002903e003200041e8036a290300845045044041a08804410010030b1000ad2205427c7c2206423f5620062005542201ad427f7c220542005220055022021b2001410020021b2201ad2205427f7c2206420052200620055a20062005541b20011b45044041a08804410010030b200041c0046a410441201001200041c0036a20002903c004200041c8046a2201290300200041d0046a2202290300200041d8046a2203290300100c200041c8036a290300210720002903c00321084100200041d0036a2903002205428080808010544100200041d8036a2903002206501b200542808080801085200684501b45044041a08804410010030b200041c0046a412441201001200041a0036a20002903c004200129030020022903002003290300100c200820072005200620002903a003200041a8036a290300200041b0036a290300200041b8036a290300100e20004180036a41e0880429030041e8880429030041f0880429030041f88804290300100c20004198036a290300210b20004190036a290300210720004188036a29030021092000290380032106418008290300220d42df005641880829030022084200522008501b419008290300220a42005241980829030022054200522005501b2005200a84501b450440419808420037030041900842003703004188084200370300428001210d418008428001370300420021084200210a420021050b20094200522007420052200b420052200b501b2007200b84501b450d0241a0880441001003418008290300210d4188082903002108419008290300210a4198082903002105200041c0026a200620092007200b100c41f88804200041d8026a29030037030041f08804200041d0026a29030037030041e88804200041c8026a29030037030041e0880420002903c002370300200d42df005620084200522008501b200a42005220054200522005501b2005200a84501b0d03419808420037030041900842003703004188084200370300428001210d418008428001370300420021084200210a420021050c030b41d888044280808080808080800137030041d08804420037030041c88804420037030041c0880442003703002007423f56200120021b200320041b0d0041980842003703004190084200370300418808420037030041800842e0003703000b200042003703a804200042003703a004200042808080103e02b0041004200041a0046a41a0880441c00010051a200041c0046a410041201006200041c0016a20002903c004200041c8046a290300200041d0046a290300200041d8046a2201290300100c200041a0016a20002903c001200041c8016a290300200041d0016a290300200041d8016a290300100c2001200041b8016a2903003703002000200041b0016a2903003703d0042000200041a8016a2903003703c804200020002903a0013703c004200041c0046a200041a0046a100720004180016a20002903a004200041a8046a290300200041b0046a290300200041b8046a290300100c20004198016a290300210c20004190016a290300210e20004188016a290300210f2000290380012110200041e0006a41e0880429030041e8880429030041f0880429030041f88804290300100c200041f8006a290300210b200041f0006a2903002107200041e8006a290300210920002903602106418008290300220d42df0056418808290300220a420052200a501b419008290300220842005241980829030022054200522005501b2005200884501b450440419808420037030041900842003703004188084200370300428001210d4180084280013703004200210a42002108420021050b024020094200522007420052200b420052200b501b2007200b84501b044041a0880441001003418008290300210d418808290300210a41900829030021084198082903002105200041206a200620092007200b100c41f88804200041386a29030037030041f08804200041306a29030037030041e88804200041286a29030037030041e088042000290320370300200d42df0056200a420052200a501b200842005220054200522005501b2005200884501b0d01419808420037030041900842003703004188084200370300428001210d4180084280013703004200210a42002108420021050c010b200041406b200620092007200b100c41f88804200041d8006a29030037030041f08804200041d0006a29030037030041e88804200041c8006a29030037030041e0880420002903403703000b20002010200f200e200c100c2006a7220141b888046a200041186a290300370300200141b088046a200041106a290300370300200141a888046a200041086a290300370300200141a088046a22022000290300370300200b2007200642407d220f200654220120092001ad7c2210200954200f20065a1bad7c2211200754ad7c22122005200642207c220e200d562009200e2006542201ad7c220c200a56200a200c511b20072001200c200954200e20065a1bad7c2209200856200b2009200754ad7c220620055620052006511b2008200985200520068584501b22011b21052011200820011b21072010200a20011b2108200f426083220b200d20011b210a02402001450440200e200a58200c2008582008200c511b2009200758200620055820052006511b2007200985200520068584501b0d010b41980820122005200e200a56200c2008562008200c511b2009200756200620055620052006511b2007200985200520068584501b22011b3703004190082011200720011b3703004188082010200820011b370300418008200b200a20011b3703000b2002412010080c020b200041e0026a200620092007200b100c41f88804200041f8026a29030037030041f08804200041f0026a29030037030041e88804200041e8026a29030037030041e0880420002903e0023703000b2006a7220141b888046a42808080808080808001370300200141b088046a4200370300200141a888046a4200370300200141a088046a22024200370300200b2007200642407d220f200654220120092001ad7c2210200954200f20065a1bad7c2211200754ad7c22122005200642207c220e200d562009200e2006542201ad7c220c2008562008200c511b20072001200c200954200e20065a1bad7c2209200a56200b2009200754ad7c220620055620052006511b2009200a85200520068584501b22011b21052011200a20011b21072010200820011b2108200f426083220b200d20011b210a02402001450440200e200a58200c2008582008200c511b2009200758200620055820052006511b2007200985200520068584501b0d010b41980820122005200e200a56200c2008562008200c511b2009200756200620055620052006511b2007200985200520068584501b22011b3703004190082011200720011b3703004188082010200820011b370300418008200b200a20011b3703000b2002412010080b410041001008200041e0046a24000bbd2c02067f127e230041e0076b220b2400200b220841c8066a1009200841a8066a420020082903c806220e422086200e422088200841d0066a290300220e42208684200841d8066a350200422086200e42208884100c20084188066a20082903a806200841b0066a290300200841b8066a3502004200100c41b88804200841a0066a29030037030041b0880420084198066a29030037030041a8880420084190066a29030037030041a0880420082903880637030002404180082903002214421f56418808290300220e4200522209200e50220a1b419008290300220f420052419808290300220e420052200e501b220d200e200f8450220c1b45044041d888044280808080808080800137030041d08804420037030041c88804420037030041c08804420037030041980842003703004190084200370300418808420037030041800842c0003703000c010b41d888044280808080808080800137030041d08804420037030041c88804420037030041c0880442003703002014423f562009200a1b200d200c1b0d0041980842003703004190084200370300418808420037030041800842e0003703000b200842003703a807200842003703a007200842808080103e02b0071004200841a0076a41a0880441c00010051a200841c0076a410041201006200841e8056a20082903c007200841c8076a290300200841d0076a290300200841d8076a2209290300100c200841c8056a20082903e805200841f0056a290300200841f8056a29030020084180066a290300100c2009200841e0056a2903003703002008200841d8056a2903003703d0072008200841d0056a2903003703c807200820082903c8053703c007200841c0076a200841a0076a1007200841a8056a20082903a007200841a8076a290300200841b0076a290300200841b8076a290300100c20082903a805221e20045a200841b0056a290300221420055a2005201451220a1b200841b8056a290300221520065a200841c0056a290300221120075a20072011511b2006201585200720118584501b45044020084188056a41e0880429030041e8880429030041f0880429030041f88804290300100c200841a0056a290300211720084198056a290300211320084190056a2903002116200829038805210e418008290300221842df005641880829030022104200522010501b4190082903002212420052419808290300220f420052200f501b200f201284501b4504404200211041980842003703004190084200370300418808420037030042800121184180084280013703004200210f420021120b200ea7220941b888046a4200370300200941b088046a4200370300200941a888046a4200370300200941a088046a220d428886e7830a370300200e42207c221920185820162019200e54220cad7c221a2010582010201a511b2013200c201a2016542019200e5a1bad7c221920125820172019201354ad7c221a200f58200f201a511b2012201985200f201a8584501b450440418008200e42407d220f42608322183703004188082016200f200e54220cad7c22103703004190082013200c2010201654200f200e5a1bad7c221237030041980820172012201354ad7c220f3703000b200941bc88046a42808080808080808020370300200941b488046a4200370300200941ac88046a4200370300200941a488046a4200370300200e42247c221920185820162019200e542209ad7c221820105820102018511b2013200920182016542019200e5a1bad7c221020125820172010201354ad7c221a200f58200f201a511b2010201285200f201a8584501b450440418008200e42c4007c220f4260833703004188082016200f200e542209ad7c2212370300419008201320092012201654200f200e5a1bad7c220f3703004198082017200f201354ad7c3703000b200841e8046a201920182010201a100f20082903e804220f200e7d2116200f41800829030058200841f0046a2903002210418808290300220e58200e2010511b200841f8046a290300221241900829030022175820084180056a290300220e419808290300221358200e2013511b2012201785200e20138584501b450440418008200f42207c221342608337030041880820102013200f542209ad7c22173703004190082012200920172010542013200f5a1bad7c220f370300419808200e200f201254ad7c3703000b200d2016a7100341a08804410010030b200b220941606a220b220d2400200b1009200841c8046a4200200b290300220e422086200e422088200941686a290300220e42208684200941706a350200422086200e42208884100c200841a8046a20082903c804200841d0046a290300200841d8046a3502004200100c41b88804200841c0046a29030037030041b08804200841b8046a29030037030041a88804200841b0046a29030037030041a0880420082903a804370300201520067d220e201e20045422092014200554200a1bad220f7d2110201120077d2015200654ad7d200e200f54ad7d2115201420057d2009ad7d2111201e20047d211202404180082903002213421f56418808290300220f420052200f5022091b4190082903002214420052419808290300220e420052200e50220b1b200e20148450220a1b45044041d888044280808080808080800137030041d08804420037030041c88804420037030041c08804420037030041980842003703004190084200370300418808420037030041800842c0003703000c010b41d888044280808080808080800137030041d08804420037030041c88804420037030041c0880442003703002013423f56200f42005220091b2014420052200e420052200b1b200a1b0d0041980842003703004190084200370300418808420037030041800842e0003703000b200842003703a807200842003703a007200842808080103e02b0071004200841a0076a41a0880441c00010051a200841c0076a41004120100620084188046a20082903c007200841c8076a290300200841d0076a290300200841d8076a2209290300100c200841e8036a20082903880420084190046a29030020084198046a290300200841a0046a290300100c200920084180046a290300220e3703002008200841f8036a290300220f3703d0072008200841f0036a29030022143703c807200820082903e80322133703c007200841c0076a200841a0076a1007200841c8036a2012201120102015100c20084198076a200e370300200841f8066a200841e0036a2903003703002008200f37039007200820143703880720082013370380072008200841d8036a2903003703f0062008200841d0036a2903003703e806200820082903c8033703e00620084180076a200841e0066a100a200841a8036a20002001200242ffffffff0f834200100c41b88804200841c0036a290300221e37030041b08804200841b8036a290300221737030041a88804200841b0036a290300221837030041a0880420082903a803221937030002404180082903002214421f56418808290300220e4200522209200e50220b1b419008290300220f420052419808290300220e420052200e501b220a200e200f8450220c1b45044041d888044280808080808080800137030041d08804420037030041c88804420037030041c08804420037030041980842003703004190084200370300418808420037030041800842c0003703000c010b41d888044280808080808080800137030041d08804420037030041c88804420037030041c0880442003703002014423f562009200b1b200a200c1b0d0041980842003703004190084200370300418808420037030041800842e0003703000b200842003703a807200842003703a007200842808080103e02b0071004200841a0076a41a0880441c00010051a200841c0076a41004120100620084188036a20082903c007200841c8076a290300200841d0076a290300200841d8076a2209290300100c200841e8026a20082903880320084190036a29030020084198036a290300200841a0036a290300100c200920084180036a2903003703002008200841f8026a2903003703d0072008200841f0026a2903003703c807200820082903e8023703c007200841c0076a200841a0076a1007200841c8026a20082903a007200841a8076a290300200841b0076a290300200841b8076a290300100c20082903c80222152004427f8558200841d0026a29030022142005427f85220e58200e2014511b200841d8026a290300220f2006427f85221058200841e0026a290300220e2007427f85221158200e2011511b200f201085200e20118584501b45044041a08804410010030b200420157c221a20155422092009ad200520147c7c221620145420142016511b22092006200f7c22152009ad7c2214200f542014201554ad2015200f54ad2007200e7c7c7c2215200e54200e2015511b200f201485200e20158584501b4101460440200841a8026a41e0880429030041e8880429030041f0880429030041f88804290300100c200841c0026a290300211b200841b8026a2903002112200841b0026a290300211320082903a802210e418008290300221f42df005641880829030022114200522011501b4190082903002210420052419808290300220f420052200f501b200f201084501b450440419808420037030041900842003703004188084200370300428001211f41800842800137030042002111420021104200210f0b200ea7220941b888046a4200370300200941b088046a4200370300200941a888046a4200370300200941a088046a220b428886e7830a370300200e42207c221c201f582013201c200e54220aad7c221d2011582011201d511b2012200a201d201354201c200e5a1bad7c221c201058201b201c201254ad7c221d200f58200f201d511b2010201c85200f201d8584501b450440418008200e42407d220f426083221f3703004188082013200f200e54220aad7c22113703004190082012200a2011201354200f200e5a1bad7c2210370300419808201b2010201254ad7c220f3703000b200941bc88046a42808080808080808020370300200941b488046a4200370300200941ac88046a4200370300200941a488046a4200370300200e42247c221c201f582013201c200e542209ad7c221f2011582011201f511b20122009201f201354201c200e5a1bad7c2211201058201b2011201254ad7c221d200f58200f201d511b2010201185200f201d8584501b450440418008200e42c4007c220f4260833703004188082013200f200e542209ad7c2210370300419008201220092010201354200f200e5a1bad7c220f370300419808201b200f201254ad7c3703000b20084188026a201c201f2011201d1010200829038802220f200e7d2113200f4180082903005820084190026a2903002211418808290300220e58200e2011511b20084198026a2903002210419008290300221b58200841a0026a290300220e419808290300221258200e2012511b2010201b85200e20128584501b450440418008200f42207c221242608337030041880820112012200f542209ad7c221b37030041900820102009201b2011542012200f5a1bad7c220f370300419808200e200f201054ad7c3703000b200b2013a710030b41a08804201937030041a88804201837030041b08804201737030041b88804201e37030002404180082903002211421f56418808290300220e4200522209200e50220b1b419008290300220f420052419808290300220e420052200e501b220a200e200f8450220c1b45044041d888044280808080808080800137030041d08804420037030041c88804420037030041c08804420037030041980842003703004190084200370300418808420037030041800842c0003703000c010b41d888044280808080808080800137030041d08804420037030041c88804420037030041c0880442003703002011423f562009200b1b200a200c1b0d0041980842003703004190084200370300418808420037030041800842e0003703000b200842003703a807200842003703a007200842808080103e02b0071004200841a0076a41a0880441c00010051a200841c0076a410041201006200841e8016a20082903c007200841c8076a290300200841d0076a290300200841d8076a2209290300100c200841c8016a20082903e801200841f0016a290300200841f8016a29030020084180026a290300100c2009200841e0016a290300220e3703002008200841d8016a290300220f3703d0072008200841d0016a29030022113703c807200820082903c80122103703c007200841c0076a200841a0076a1007200841a8016a201a201620142015100c20084198076a200e370300200841f8066a200841c0016a2903003703002008200f37039007200820113703880720082010370380072008200841b8016a2903003703f0062008200841b0016a2903003703e806200820082903a8013703e00620084180076a200841e0066a100a200d220941606a220b220a2400200b100920084188016a4200200b290300220e422086200e422088200941686a290300220e42208684200941706a350200422086200e42208884100c20084190016a290300211920084198016a350200211a200829038801211b200841e8006a41e0880429030041e8880429030041f0880429030041f88804290300100c20084180016a2903002113200841f8006a2903002111200841f0006a29030021102008290368210f418008290300221242df005641880829030022144200522014501b4190082903002215420052419808290300220e420052200e501b200e201584501b450440419808420037030041900842003703004188084200370300428001211241800842800137030042002114420021154200210e0b200841c8006a2004200520062007100c200fa7220941b888046a200841e0006a290300370300200941b088046a200841d8006a290300370300200941a888046a200841d0006a290300370300200941a088046a220c200829034837030020132011200f42407d2205200f54220920102009ad7c22162010542005200f5a1bad7c221e201154ad7c211720054260832118200f42207c220420125820102004200f542209ad7c220620145820062014511b2011200920062010542004200f5a1bad7c220720155820132007201154ad7c2205200e582005200e511b20072015852005200e8584501b45044041800820183703004188082016370300419008201e37030041980820173703002018211220162114201e21152017210e0b200a220941606a220b220a2400200941786a42a8eaebead4fec8d96f370300200941706a4295d79c8dbf8cf1d016370300200941686a42e984c3c5c6ffcdc6aa7f370300200b42dde5cbeabac3b8e49b7f370300200a220941606a220a220d2400200841286a201b2019201a4200100c200841306a290300210f200841386a290300211120082903282110200941786a200841406b290300370300200941706a2011370300200941686a200f370300200a2010370300200d220941606a220d2400200841086a2000200120022003100c200841106a290300210f200841186a290300211120082903082110200941786a200841206a290300370300200941706a2011370300200941686a200f370300200d20103703002004201258200620145820062014511b20072015582005200e582005200e511b20072015852005200e8584501b45044041800820183703004188082016370300419008201e37030041980820173703000b200c41204103200b200a200d4100100b200841e0076a24000bb40502047f0b7e230041406a22072106200724002001a7220541b888046a4280808080808080801e370300200541b088046a4200370300200541a888046a4200370300200541a088046a420037030020042003200142407d220e200154220520022005ad7c220c200254200e20015a1bad7c220d200354ad7c210a200142207c2210418008290300221158200220102001542205ad7c2209418808290300220b582009200b511b200320052009200254201020015a1bad7c2212419008290300220f5820042012200354ad7c221341980829030022095820092013511b200f201285200920138584501b450440418808200c370300418008200e4260832211370300419008200d370300419808200a370300200c210b200d210f200a21090b2007220541606a220724002005417c6a41efee013b0100200541786a220841e5e499e306360200200541706a42e3e8a5fbe68dc8b7f600370300200541686a42bac0ccaba78c9db9e100370300200742d3c299abd6a998bae800370300200641206a42d3c299abd6a998bae80042bac0ccaba78c9db9e10042e3e8a5fbe68dc8b7f6002008290300100c20062006290320200641286a290300200641306a290300200641386a290300100c2010a7220541b888046a200641186a290300370300200541b088046a200641106a290300370300200541a888046a200641086a290300370300200541a088046a2006290300370300200e201158200c200b58200b200c511b200d200f58200a2009582009200a511b200d200f852009200a8584501b450440418008200142e0007c2209426083370300418808200220092001542205ad7c220b37030041900820032005200b200254200920015a1bad7c220137030041980820042001200354ad7c3703000b2000200e3703002000200c3703082000200d370310200041186a200a370300200641406b24000bb10502047f0b7e230041406a22072106200724002001a7220541b888046a4280808080808080801b370300200541b088046a4200370300200541a888046a4200370300200541a088046a420037030020042003200142407d220e200154220520022005ad7c220c200254200e20015a1bad7c220d200354ad7c210a200142207c2210418008290300221158200220102001542205ad7c2209418808290300220b582009200b511b200320052009200254201020015a1bad7c2212419008290300220f5820042012200354ad7c221341980829030022095820092013511b200f201285200920138584501b450440418808200c370300418008200e4260832211370300419008200d370300419808200a370300200c210b200d210f200a21090b2007220541606a220724002005417a6a41f7003a0000200541786a220841ecde013b0100200541706a42efdc81f9e6ae99b9e600370300200541686a42bac084a3c6ac9abae900370300200742d3c299abd6a998bae800370300200641206a42d3c299abd6a998bae80042bac084a3c6ac9abae90042efdc81f9e6ae99b9e6002008290300100c20062006290320200641286a290300200641306a290300200641386a290300100c2010a7220541b888046a200641186a290300370300200541b088046a200641106a290300370300200541a888046a200641086a290300370300200541a088046a2006290300370300200e201158200c200b58200b200c511b200d200f58200a2009582009200a511b200d200f852009200a8584501b450440418008200142e0007c2209426083370300418808200220092001542205ad7c220b37030041900820032005200b200254200920015a1bad7c220137030041980820042001200354ad7c3703000b2000200e3703002000200c3703082000200d370310200041186a200a370300200641406b24000b0400100d0b ``` -### **Step 2: Submit the Hex Code files to Ewasm TestNet.** +Then exit SOLL container goto next step. -Copy the Hex Code generated by the previous step. +### 3.4.3 Attach to our Ewasm DevChain -![Find ToolsSubmitTx](doc/images/3-5-2-SubmitTx-1.png) +- Pull our devchain docker image. -Paste the Hex Code to Ewasm TestNet website and submit it. +```bash +> docker pull secondstate/devchain:devchain +``` -![Paste the Hex Code and submit it](doc/images/3-5-2-SubmitTx-2.png) +- Attach to testnet -Submit the Hex Code to Ewasm TestNet. +```bash +> docker run -it secondstate/devchain:devchain attach http://devchain-ewasm.secondstate.io:8545 +``` -![Submiting the Hex Code](doc/images/3-5-2-SubmitTx-3.png) +- Unlock the demo account with a long expiration time. -### **Step 3: Check activities of TestNet to make sure our contracts executed successfully.** +```javascript +(RPC host) $ personal.unlockAccount(cmt.accounts[0], '1234', 9999999) +``` -Check whether the latest activity is our contract or not. +### 3.4.4 Deploy and execute Ewasm -![Check the latest activity](doc/images/3-5-3-CheckAct.png) -![Check the latest transaction](doc/images/3-5-3-CheckLatestTx.png) +#### 3.4.4-1 Solidity: 0-0-3.wasm -Check the Bytecode of the latest activity. +- Deploy Ewasm bytecode generated from 0-0-3.sol that has been seen before. +```javascript +(RPC host) $ cmt.sendTransaction({ +from: personal.listAccounts[0], +gas: 5000000, +data: "0x0061736d..." (omitted, here is Ewasm bytecode head with 0x generated from 0-0-3.sol) +}) -![Check the bytecode](doc/images/3-5-3-CheckBytecode.png) +// The result should be a random hash similar to the following content. +"0xf11d854c93cd0bec4bc1748cfb3b4bf64987c463688b5b44fc68ea668397dc95" +``` -Check the Ewasm code of the latest activity. +- Get the deployed contract address by getTransactionReceipt(hash). +```javascript +(RPC host) $ cmt.getTransactionReceipt("0xf11d854c93cd0bec4bc1748cfb3b4bf64987c463688b5b44fc68ea668397dc95") + +// The result should similar to the following content. +{ + blockHash: "0x95aa0baa716d9c794a8b469eba2bc24bb8fb85ae067aa30a576ef824488b5850", + blockNumber: 1549, + contractAddress: "0x9e05b78ea853a4b093694645561c4bfc953a6f62", + cumulativeGasUsed: 1519352, + from: "0x7eff122b94897ea5b0e2a9abf47b86337fafebdc", + gasUsed: 1519352, + logs: [], + logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + status: "0x1", + to: null, + transactionHash: "0xf11d854c93cd0bec4bc1748cfb3b4bf64987c463688b5b44fc68ea668397dc95", + transactionIndex: 0 +} +``` + +- You can check the contract deployed was success by getCode(contract address) +```javascript +(RPC host) $ cmt.getCode("0x9e05b78ea853a4b093694645561c4bfc953a6f62") + +// The result should similar to the following content. +"0x0061736d01000000..." (omitted, runtime Ewasm bytecode) +``` -![Check the Ewasm code](doc/images/3-5-3-CheckEwasm.png) +- Send the transaction to execute a contract function `transfer` + - data + - 0xa9059cbb : transfer(address,uint256) function signature + - 0x77beb894fc9b0ed41231e51f128a347043960a9d : just use personal.listAccounts[1] as receive address + - 0x7b : decimal number 123 + - to + - 0x9e05b78ea853a4b093694645561c4bfc953a6f62 : contract address + +```javascript +(RPC host) $ cmt.sendTransaction({ +from: personal.listAccounts[0], +gas: 5000000, +data: "0xa9059cbb00000000000000000000000077beb894fc9b0ed41231e51f128a347043960a9d000000000000000000000000000000000000000000000000000000000000007b", +to: "0x9e05b78ea853a4b093694645561c4bfc953a6f62" +}) + +// The result should similar to the following content. +"0xd9d619403ca19d0f25b5e0f81e41d37dbf95ab9cbd09d919aa8fb4ade4900e42" +``` + +- Verfiy `transfer` by getTransactionReceipt. +```javascript +(RPC host) $ cmt.getTransactionReceipt("0xd9d619403ca19d0f25b5e0f81e41d37dbf95ab9cbd09d919aa8fb4ade4900e42") + +// The result should similar to the following content. +// The logs section will show that we emit an event in the `transfer` function. +{ + blockHash: "0x55bef89b2db7b4ab0def7e5cd00b91efce3944145dc8f236e60309fcd6969c7d", + blockNumber: 2401, + contractAddress: null, + cumulativeGasUsed: 53225, + from: "0x7eff122b94897ea5b0e2a9abf47b86337fafebdc", + gasUsed: 53225, + logs: [{ + address: "0x9e05b78ea853a4b093694645561c4bfc953a6f62", + blockHash: "0x55bef89b2db7b4ab0def7e5cd00b91efce3944145dc8f236e60309fcd6969c7d", + blockNumber: 2401, + data: "0x000000000000000000000000000000000000000000000000000000000000007b", + logIndex: 0, + removed: false, + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", "0x0000000000000000000000007eff122b94897ea5b0e2a9abf47b86337fafebdc", "0x00000000000000000000000077beb894fc9b0ed41231e51f128a347043960a9d"], + transactionHash: "0xd9d619403ca19d0f25b5e0f81e41d37dbf95ab9cbd09d919aa8fb4ade4900e42", + transactionIndex: 0 + }], + logsBloom: "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000001000000000000080000000000000000000000000000000000020000400001000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000", + status: "0x1", + to: "0x9e05b78ea853a4b093694645561c4bfc953a6f62", + transactionHash: "0xd9d619403ca19d0f25b5e0f81e41d37dbf95ab9cbd09d919aa8fb4ade4900e42", + transactionIndex: 0 +} +``` -Check the Storage part of the latest activity. +#### 3.4.4-2 Yul: 0-0-6.wasm -![Check the Storage](doc/images/3-5-3-CheckStorage.png) +> All steps are the same with 3.4.4-1. +> You only need to replace the Ewasm bytecode with 0-0-6.wasm. -Congratulations! Now you finished our user tutorial. +(Omitted) diff --git a/doc/guides/DevGuide.md b/doc/guides/DevGuide.md index 0059e12c..e0a7ffe3 100644 --- a/doc/guides/DevGuide.md +++ b/doc/guides/DevGuide.md @@ -5,10 +5,10 @@ In this guide, we will introduce how to use SOLL to compile smart contracts and execute these contracts by our benchmark. -In following sections, we provide four parts to show how to compile and execute smart contracts by yourself. +In the following sections, we provide four parts to show how to compile and execute smart contracts by yourself. -1. Prepare required environment. -2. Build SOLL compiler from source code. +1. Prepare the required environment. +2. Build the SOLL compiler from source code. 3. Generate Ewasm bytecodes from our demo contracts and execute them. - [0-0-1.sol](../../doc/examples/0-0-1.sol) - A basic smart contract example (SaftMath) - [0-0-2.sol](../../doc/examples/0-0-2.sol) - A partial function example of [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) contract. @@ -22,7 +22,7 @@ In following sections, we provide four parts to show how to compile and execute - [0-0-3.sol](../../doc/examples/0-0-3.sol) - A full function example of [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) contract. - [0-0-6.yul](../../doc/examples/0-0-6.yul) - A Yul file generated from solc with version 0.6.1. -2. SOLL regression tests and our Solidity and Yul tests coverage. +2. SOLL regression tests and our Solidity and Yul test coverage. ## Working Tree ``` @@ -30,22 +30,22 @@ soll ├── (...) ├── build // Build code path, manually create it ├── doc -│   ├── (...) -│   └── example // Examples of every release -│       ├── 0-0-1.sol // A basic smart contract example (SafeMath) +│ ├── (...) +│ └── example // Examples of every release +│ ├── 0-0-1.sol // A basic smart contract example (SafeMath) │ ├── 0-0-2.sol // A partial version of ERC20 contract │ ├── 0-0-3.sol // A full function example of ERC20 contract -│       ├── 0-0-4.yul // A fibonacci sequence example written in Yul -│       ├── 0-0-6.sol // A smart contract base on 0-0-3.sol +│ ├── 0-0-4.yul // A fibonacci sequence example written in Yul +│ ├── 0-0-6.sol // A smart contract base on 0-0-3.sol │ │ // (Only remove some statements that solc generate ir is not support) -│       └── 0-0-6.yul // Generated from 0-0-6.sol by solc version 0.6.1 +│ └── 0-0-6.yul // Generated from 0-0-6.sol by solc version 0.6.1 ├── (...) └── utils ├── (...) └── ewasm-testbench -    ├── (...) -    ├── safeMath.js // 0-0-1.sol Test Environment -    └── erc20.js // 0-0-2.sol Test Environment + ├── (...) + ├── safeMath.js // 0-0-1.sol Test Environment + └── erc20.js // 0-0-2.sol Test Environment ``` ## Build SOLL @@ -81,7 +81,7 @@ Build SOLL without enabling our built-in test suite. ### Compile and execute SafeMath smart contract -To show how to use SOLL to compile and execute smart contracts, we provide a very basic example to demonstrate it. In this example, the smart contract will provide Safe Math machnism that will make sure that calculation results will not be overflow or divided by zero. In following steps, we will show how to compile this example and use our benchmark to run this smart contract. +To show how to use SOLL to compile and execute smart contracts, we provide a very basic example to demonstrate it. In this example, the smart contract will provide a Safe Math mechanism that will make sure that calculation results will not be overflow or divide by zero. In the following steps, we will show how to compile this example and use our benchmark to run this smart contract. #### **Step 1. Use SOLL generate WASM file from given contract** @@ -99,7 +99,7 @@ Preprocessing before test #### **Step 2. Run in Test Env** -We use "16 divides 7" as our smart contract function to check whether our "SafeMath" execute correctly or not. +We use "16 divides 7" as our smart contract function to check whether our "SafeMath" executes correctly or not. ```bash (docker) $ ./safeMath.js safeMath.wasm div 16 7 @@ -124,7 +124,7 @@ finish(66032, 32) ### Execute an ERC20 smart contract compiled by SOLL -We provide an example 0-0-2.sol, to demonstrate how to use SOLL to compile and execute ERC20 contracts. In this example, we use 0-0-2.sol that contains very core functions of ERC20 contract to demonstrate how to compile and execute ERC20 contracts. +We provide an example 0-0-2.sol, to demonstrate how to use SOLL to compile and execute ERC20 contracts. In this example, we use 0-0-2.sol that contains very core functions of the ERC20 contract to demonstrate how to compile and execute ERC20 contracts. #### **Step 1. Use SOLL generate WASM file from given contract** @@ -206,7 +206,7 @@ The result should be the same as the following content. ### Compile and execute Yul code -To show how to use SOLL to compile and execute Yul code, we also provide a very basic example to demonstrate it. In this example, the code will calculate first ten numbers of the Fibonacci sequence and store them into storage with address 0 to 9 . In following steps, we will show how to compile this example and use our benchmark to run this code. +To show how to use SOLL to compile and execute Yul code, we also provide a very basic example to demonstrate it. In this example, the code will calculate the first ten numbers of the Fibonacci sequence and store them into storage with addresses 0 to 9. In the following steps, we will show how to compile this example and use our benchmark to run this code. #### **Step 1. Use SOLL generate WASM file from Yul code** @@ -238,7 +238,7 @@ The result should be the same as the following content. ### Deploy and execute Ewasm on DevChain. > **[DevChain](https://github.com/second-state/devchain/tree/devchain)** -> The Second State DevChain features a powerful and easy-to-use virtual machine that can quickly get you started with smart contract and DApp development. Our devchain supports Ewasm by [hera](https://github.com/ewasm/hera) through EVMC interface. +> The Second State DevChain features a powerful and easy-to-use virtual machine that can quickly get you started with the smart contract and DApp development. Our devchain supports Ewasm by [hera](https://github.com/ewasm/hera) through the EVMC interface. #### **Step 1. Generate Ewasm from solidity contract and Yul code** @@ -295,7 +295,7 @@ Then exit SOLL container goto next step. > docker run -d --rm --name devchain -v $PWD/data:/devchain secondstate/devchain:devchain node start --home /devchain ``` -- Get a shell from devchain container. +- Get a shell from a devchain container. ```bash > docker exec -it devchain bash @@ -307,7 +307,7 @@ Then exit SOLL container goto next step. (devchain docker) $ /app/devchain attach http://localhost:8545 ``` -- Unlock demo account with a long expiration time. +- Unlock the demo account with a long expiration time. ```javascript (RPC host) $ personal.unlockAccount(cmt.accounts[0], '1234', 9999999) @@ -357,7 +357,7 @@ The result should similar to the following content. } ``` -- You can check the contract deployed was success by getCode(contract address) +- You can check the contract deployed was succeeded by getCode(contract address) ```javascript (RPC host) $ cmt.getCode("0x9e05b78ea853a4b093694645561c4bfc953a6f62") @@ -368,7 +368,7 @@ The result should similar to the following content. "0x0061736d01000000..." (omitted, runtime Ewasm bytecode) ``` -- Send transaction execute a contract function `transfer` +- Send the transaction to execute a contract function `transfer` - data - 0xa9059cbb : transfer(address,uint256) function signature - 0x77beb894fc9b0ed41231e51f128a347043960a9d : just use personal.listAccounts[1] as receive address @@ -397,7 +397,7 @@ The result should similar to the following content. ``` The result should similar to the following content. -> The logs section will show that we emit an event in `transfer` function. +> The logs section will show that we emit an event in the `transfer` function. ```javascript { @@ -428,7 +428,7 @@ The result should similar to the following content. **Demo 2. Deploy and execute Ewasm generated from Yul code.** -> The all steps are the same with demo 1. +> All steps are the same with demo 1. > You only need use **0-0-6.wasm Ewasm bytecode** replace deploy transaction. (Omitted) diff --git a/doc/guides/EwasmTestNetDeprecated.md b/doc/guides/EwasmTestNetDeprecated.md new file mode 100644 index 00000000..797ea025 --- /dev/null +++ b/doc/guides/EwasmTestNetDeprecated.md @@ -0,0 +1,48 @@ +[//]: # (SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception) + +# Deploy an ERC20 smart contract to Ewasm TestNet + +## Warning: This tutorial is deprecated because Ewasm TestNet is unavailable now + +### **Step 1: Convert Wasm files to Hex Code files.** + +To deploy our smart contract to TestNet, we need to convert the WASM files to Hex Code files. + +```bash +(docker) $ xxd -p contract.wasm | tr -d $'\n' +``` + +### **Step 2: Submit the Hex Code files to Ewasm TestNet.** + +Copy the Hex Code generated by the previous step. + +![Find ToolsSubmitTx](../images/3-5-2-SubmitTx-1.png) + +Paste the Hex Code to the Ewasm TestNet website and submit it. + +![Paste the Hex Code and submit it](../images/3-5-2-SubmitTx-2.png) + +Submit the Hex Code to Ewasm TestNet. + +![Submiting the Hex Code](../images/3-5-2-SubmitTx-3.png) + +### **Step 3: Check activities of TestNet to make sure our contracts executed successfully.** + +Check whether the latest activity is our contract or not. + +![Check the latest activity](../images/3-5-3-CheckAct.png) +![Check the latest transaction](../images/3-5-3-CheckLatestTx.png) + +Check the Bytecode of the latest activity. + +![Check the bytecode](../images/3-5-3-CheckBytecode.png) + +Check the Ewasm code of the latest activity. + +![Check the Ewasm code](../images/3-5-3-CheckEwasm.png) + +Check the Storage part of the latest activity. + +![Check the Storage](../images/3-5-3-CheckStorage.png) + +Congratulations! Now you finished our user tutorial.