# ETH **Repository Path**: tarzansos/eth ## Basic Information - **Project Name**: ETH - **Description**: Ruby Ethernum Framework - **Primary Language**: Ruby - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2017-07-06 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # README ##目录说明 * contracts目录 放置solidity合约目录,开发的solidity合约放在这个目录管理 * contracts/build目录 放置solidity合约编译过程中的abi,code,ip等数据 * app/contracts/目录 放置结果DSL后的ruby contract对象,供测试、开发时使用 * lib/task/目录 rake任务 * config 目录 etheruby.yml配置ETH RPC链接 ``` yaml client_conn_type: http client_conn_address: 'http://localhost:8545' client_id: 988 client_eth_debug: false #client_conn_type: ipc #client_conn_address: '/.parity/mycustom.ipc' default_from: 0x0000000000000000000000000000000000000000 default_height: latest addresses: 0x0000000000000000000000000000000000000000: my_address_passwd ``` ##RPC 调用 示例 ``` ruby w3 = Web3::Web3.new accounts = w3.personal_listAccounts puts w3.eth_getBalance accounts[0] amount_to_send = 0.0001 w3.sendEther(accounts[0], accounts[1], amount_to_send, "mypassword") ``` ##rake 任务 1. rake contract:compile 编译solidity合约,生成合约的abi与code。 2. rake contract:deploy 发布solidity合约,合约发布到网络,并记录合约的address。 3. rake contract:gen_deploy 发布solidity合约,合约发布到网络,并生成对应Ruby DSL Class。 ##Ruby中Ethereum合约调用 ``` solidity class Foo include Etheruby::Contract at_address 0x57eb1e64d972d9937c6f6f07a865e91608252c97 contract_method :bar do parameters array(:fixed128x128, 2) end contract_method :baz do parameters :uint32, :bool returns :bool end contract_method :sam do parameters :bytes, :bool, array(:uint256) returns :bool end contract_method :f do parameters :uint256, array(:uint32), :bytes10, :bytes end contract_method :thisIsCamelCase end ``` Ruby DSL后可以直接调用Ruby对象。 ``` ruby Foo.bar([2.125, 8.5]) Foo.baz(69,true) Foo.sam("dave".codepoints, true, [1,2,3]) Foo.f(0x123, [0x456, 0x789], "1234567890".codepoints, "Hello, world!".codepoints) Foo.this_is_camel_case Foo.thisIsCamelCase ```