platon 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +24 -20
- data/doc/zh-cn.md +32 -14
- data/examples/generate_keys.rb +17 -0
- data/examples/get_balance.rb +33 -0
- data/lib/platon.rb +23 -24
- data/lib/{bech32.rb → platon/bech32.rb} +0 -0
- data/lib/platon/client.rb +2 -2
- data/lib/platon/contract.rb +0 -4
- data/lib/platon/key.rb +9 -7
- data/lib/platon/key/encrypter.rb +1 -1
- data/lib/platon/open_ssl.rb +16 -17
- data/lib/platon/version.rb +1 -1
- metadata +5 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5b74aa93e42dc1018e37a97771b504ce6f9afd8e54cd71d2356878e7a0b96d6f
         | 
| 4 | 
            +
              data.tar.gz: 27c316fccb2c0e8a794e743ccd4c5f9f9bddac9510ad5d0e5060f351333e54ab
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 25d498145373bbcc9e769208eebbd37cfbbdfa3abdcb2f4ef1fb0d6abe3fe4ac3831ac05adb578b70a1c27bc4fdd682647b7a6e9be6af44e904bbddabaa28b7d
         | 
| 7 | 
            +
              data.tar.gz: 96195888ad12015a29f3cf5da1d15ec7ffd2ccf8c9241eabd74308121c2a3dac14bab565c52c1ae2f5622704dcf462d6db044a1129b286ae6b88989b3715d65a
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                platon (0.2. | 
| 4 | 
            +
                platon (0.2.8)
         | 
| 5 5 | 
             
                  activesupport (>= 4.0)
         | 
| 6 6 | 
             
                  digest-sha3 (~> 1.1)
         | 
| 7 7 | 
             
                  ffi (~> 1.0)
         | 
| @@ -18,7 +18,7 @@ GEM | |
| 18 18 | 
             
                  minitest (~> 5.1)
         | 
| 19 19 | 
             
                  tzinfo (~> 1.1)
         | 
| 20 20 | 
             
                coderay (1.1.3)
         | 
| 21 | 
            -
                concurrent-ruby (1.1. | 
| 21 | 
            +
                concurrent-ruby (1.1.9)
         | 
| 22 22 | 
             
                diff-lcs (1.4.4)
         | 
| 23 23 | 
             
                digest-sha3 (1.1.0)
         | 
| 24 24 | 
             
                ffi (1.15.1)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            # Ruby SDK for Platon & Alaya 
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 5 4 | 
             
            <p align="center">
         | 
| 6 5 | 
             
                <img src="./platon-ruby-logo.png" width="80" title="platon ruby SDK" alt="platon ruby SDK">
         | 
| 7 6 | 
             
            </p>
         | 
| @@ -29,7 +28,7 @@ Or install it yourself as: | |
| 29 28 |  | 
| 30 29 | 
             
            ## Quick Start
         | 
| 31 30 |  | 
| 32 | 
            -
            ```
         | 
| 31 | 
            +
            ```ruby
         | 
| 33 32 | 
             
            ## generate new key 
         | 
| 34 33 | 
             
            key = Platon::Key.new  
         | 
| 35 34 |  | 
| @@ -53,7 +52,7 @@ client.transfer key,"atpxxxxxxxxxxxxxxx",10**16 | |
| 53 52 |  | 
| 54 53 | 
             
            Create a new public/private key and get its address
         | 
| 55 54 |  | 
| 56 | 
            -
            ```
         | 
| 55 | 
            +
            ```ruby
         | 
| 57 56 | 
             
            key = Platon::Key.new
         | 
| 58 57 | 
             
            key.private_hex ## private key
         | 
| 59 58 | 
             
            => "08bb093d6184cb06a3f80507953ba6768c03d8114a429b0ec7875bb6b6e1a8a6"
         | 
| @@ -61,11 +60,11 @@ key.private_hex ## private key | |
| 61 60 | 
             
            key.public_hex ## public key
         | 
| 62 61 | 
             
            => "04641129e66399310ce4a41098d3b3fc4d722edf423dfdc0a76eba5d6e2155bbe611ee2a5c06011ab76040ca53b9ead4c5061d8cc8a89afa3f45af5830661d4b34"
         | 
| 63 62 |  | 
| 64 | 
            -
            key.bech32_address  ## bech32 address ,default " | 
| 65 | 
            -
            => " | 
| 63 | 
            +
            key.bech32_address  ## bech32 address ,default "lat"
         | 
| 64 | 
            +
            => "lat1ls87d3mqfhxadjsmn0ns844tj8ljlsq8uqnv8u" 
         | 
| 66 65 |  | 
| 67 | 
            -
            key.bech32_address(hrp: " | 
| 68 | 
            -
            => " | 
| 66 | 
            +
            key.bech32_address(hrp: "atp") 
         | 
| 67 | 
            +
            => "atp1ls87d3mqfhxadjsmn0ns844tj8ljlsq89k95cn"
         | 
| 69 68 |  | 
| 70 69 | 
             
            key.address ## EIP55 checksummed address
         | 
| 71 70 | 
             
            => "0xFc0Fe6c7604dcDd6ca1B9be703D6AB91fF2fC007"
         | 
| @@ -73,14 +72,19 @@ key.address ## EIP55 checksummed address | |
| 73 72 |  | 
| 74 73 | 
             
            Encrypt keys to json file
         | 
| 75 74 |  | 
| 76 | 
            -
            ```
         | 
| 75 | 
            +
            ```ruby
         | 
| 76 | 
            +
            ## default address hrp:"lat"
         | 
| 77 77 | 
             
            encrypted_key_info = Platon::Key.encrypt key,"your_password"
         | 
| 78 78 |  | 
| 79 | 
            +
            ## set address hrp
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            encrypted_key_info = Platon::Key.encrypt key,"your_password",{hrp:"atp"}
         | 
| 82 | 
            +
             | 
| 79 83 | 
             
            ## or save to location
         | 
| 80 84 |  | 
| 81 | 
            -
            Platon::Key.encrypt_and_save key,"your_password",'./some/path.json'
         | 
| 85 | 
            +
            Platon::Key.encrypt_and_save key,"your_password",{hrp:"atp",keypath:'./some/path.json'}
         | 
| 82 86 |  | 
| 83 | 
            -
            ## or default: | 
| 87 | 
            +
            ## or default keypath: "~/.platon/keystore" ,and use default hrp:"lat"
         | 
| 84 88 |  | 
| 85 89 | 
             
            Platon::Key.encrypt_and_save key,"your_password" 
         | 
| 86 90 |  | 
| @@ -88,7 +92,7 @@ Platon::Key.encrypt_and_save key,"your_password" | |
| 88 92 |  | 
| 89 93 | 
             
            Decrypt keys from json file
         | 
| 90 94 |  | 
| 91 | 
            -
            ```
         | 
| 95 | 
            +
            ```ruby
         | 
| 92 96 | 
             
            decrypted_key = Platon::Key.decrypt encrypted_key_info,"your_password"
         | 
| 93 97 |  | 
| 94 98 | 
             
            or
         | 
| @@ -100,7 +104,7 @@ decrypted_key = Platon::Key.decrypt File.read('./some/path.json'), 'your_passwor | |
| 100 104 |  | 
| 101 105 | 
             
            Build a transcation :
         | 
| 102 106 |  | 
| 103 | 
            -
            ```
         | 
| 107 | 
            +
            ```ruby
         | 
| 104 108 | 
             
            args = { 
         | 
| 105 109 | 
             
                from: key.address,
         | 
| 106 110 | 
             
                to: key2.address,
         | 
| @@ -116,13 +120,13 @@ tx = Platon::Tx.new args | |
| 116 120 |  | 
| 117 121 | 
             
            Or decode from an encoded raw transaction
         | 
| 118 122 |  | 
| 119 | 
            -
            ```
         | 
| 123 | 
            +
            ```ruby
         | 
| 120 124 | 
             
            tx = Platon::Tx.decode hex
         | 
| 121 125 | 
             
            ```
         | 
| 122 126 |  | 
| 123 127 | 
             
            You can sign the transaction:
         | 
| 124 128 |  | 
| 125 | 
            -
            ```
         | 
| 129 | 
            +
            ```ruby
         | 
| 126 130 | 
             
            tx.sign key
         | 
| 127 131 | 
             
            platon_send_raw_transaction(tx.hex)
         | 
| 128 132 | 
             
            ```
         | 
| @@ -133,7 +137,7 @@ Get the raw transaction with `tx.hex`, and broadcast it through any PlatON node | |
| 133 137 |  | 
| 134 138 | 
             
            By default methods interactiong with contracts&PPOS will use default JSON RPC Client that will handle connection to platon node. 
         | 
| 135 139 |  | 
| 136 | 
            -
            ```
         | 
| 140 | 
            +
            ```ruby
         | 
| 137 141 | 
             
            client = Platon::HttpClient.new("http://127.0.0.1:6789",:alayadev)
         | 
| 138 142 | 
             
            ```
         | 
| 139 143 |  | 
| @@ -146,7 +150,7 @@ Default setting: | |
| 146 150 |  | 
| 147 151 | 
             
            You can use `client.update_setting` to change chain configs:
         | 
| 148 152 |  | 
| 149 | 
            -
            ```
         | 
| 153 | 
            +
            ```ruby
         | 
| 150 154 | 
             
            client.update_setting(hrp:"atx",chain_id: 1234)
         | 
| 151 155 | 
             
            ```
         | 
| 152 156 |  | 
| @@ -154,12 +158,12 @@ client.update_setting(hrp:"atx",chain_id: 1234) | |
| 154 158 |  | 
| 155 159 | 
             
            You can get contract from blockchain. To do so you need a contract name ,contract address and ABI definition:
         | 
| 156 160 |  | 
| 157 | 
            -
            ```
         | 
| 161 | 
            +
            ```ruby
         | 
| 158 162 | 
             
            contract = Platon::Contract.create(client: client ,name: "MyContract", address: "atpxxxx_your_bench32_address", abi: abi)
         | 
| 159 163 | 
             
            ```
         | 
| 160 164 |  | 
| 161 165 | 
             
            Alternatively you can obtain abi definition and name from contract source file:
         | 
| 162 | 
            -
            ```
         | 
| 166 | 
            +
            ```ruby
         | 
| 163 167 | 
             
            contract = Platon::Contract.create(client: client , file: "MyContract.sol", address: "atpxxxx_your_bench32_address")
         | 
| 164 168 | 
             
            ```
         | 
| 165 169 |  | 
| @@ -167,7 +171,7 @@ Interacting with contracts: | |
| 167 171 |  | 
| 168 172 | 
             
            You can `call` contract read-only method , no transaction will be sent to the network. If method changes contract state ,`transact` method can be used .
         | 
| 169 173 |  | 
| 170 | 
            -
            ```
         | 
| 174 | 
            +
            ```ruby
         | 
| 171 175 | 
             
            contract.call.[function_name](params)
         | 
| 172 176 |  | 
| 173 177 | 
             
            contract.transact.[function_name](params)
         | 
| @@ -181,7 +185,7 @@ All PPOS methods have been implemented. See [Docs](./doc/zh-cn.md) | |
| 181 185 |  | 
| 182 186 | 
             
            #### Utils
         | 
| 183 187 |  | 
| 184 | 
            -
            ```
         | 
| 188 | 
            +
            ```ruby
         | 
| 185 189 | 
             
            Platon::Utils.is_bech32_address?("atp1tfm3e44jwdjmelcc9yacus700wcts0zhgw6425")
         | 
| 186 190 | 
             
            => true
         | 
| 187 191 |  | 
    
        data/doc/zh-cn.md
    CHANGED
    
    | @@ -66,13 +66,18 @@ key.address ## EIP55 checksummed address | |
| 66 66 | 
             
            将key加密保存至json文件
         | 
| 67 67 |  | 
| 68 68 | 
             
            ```ruby
         | 
| 69 | 
            +
            ## default address hrp:"lat"
         | 
| 69 70 | 
             
            encrypted_key_info = Platon::Key.encrypt key,"your_password"
         | 
| 70 71 |  | 
| 72 | 
            +
            ## set address hrp
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            encrypted_key_info = Platon::Key.encrypt key,"your_password",{hrp:"atp"}
         | 
| 75 | 
            +
             | 
| 71 76 | 
             
            ## or save to location
         | 
| 72 77 |  | 
| 73 | 
            -
            Platon::Key.encrypt_and_save key,"your_password",'./some/path.json'
         | 
| 78 | 
            +
            Platon::Key.encrypt_and_save key,"your_password",{hrp:"atp",keypath:'./some/path.json'}
         | 
| 74 79 |  | 
| 75 | 
            -
            ## or default: | 
| 80 | 
            +
            ## or default keypath: "~/.platon/keystore" ,and use default hrp:"lat"
         | 
| 76 81 |  | 
| 77 82 | 
             
            Platon::Key.encrypt_and_save key,"your_password" 
         | 
| 78 83 |  | 
| @@ -929,11 +934,11 @@ key.public_hex ## 公钥 | |
| 929 934 | 
             
            key.address
         | 
| 930 935 | 
             
            => "0xFc0Fe6c7604dcDd6ca1B9be703D6AB91fF2fC007"
         | 
| 931 936 |  | 
| 932 | 
            -
            key.bech32_address  ## bech32 格式公钥 ,默认是 " | 
| 933 | 
            -
            => " | 
| 937 | 
            +
            key.bech32_address  ## bech32 格式公钥 ,默认是 "lat"
         | 
| 938 | 
            +
            => "lat1ls87d3mqfhxadjsmn0ns844tj8ljlsq8uqnv8u" 
         | 
| 934 939 |  | 
| 935 | 
            -
            key.bech32_address(hrp: " | 
| 936 | 
            -
            => " | 
| 940 | 
            +
            key.bech32_address(hrp: "atp") 
         | 
| 941 | 
            +
            => "atp1ls87d3mqfhxadjsmn0ns844tj8ljlsq89k95cn"
         | 
| 937 942 | 
             
            ```
         | 
| 938 943 |  | 
| 939 944 | 
             
            ### 使用已有私钥导入创建key
         | 
| @@ -945,40 +950,53 @@ key = Platon::Key.new priv: private_key | |
| 945 950 |  | 
| 946 951 | 
             
            ### 备份钱包 encrypt
         | 
| 947 952 |  | 
| 948 | 
            -
            备份钱包,输入密码加密得到json | 
| 953 | 
            +
            备份钱包,输入密码加密得到json字符串。第三个参数为options,hash类型,可传参数有:  hrp
         | 
| 949 954 |  | 
| 950 955 | 
             
            ```ruby
         | 
| 956 | 
            +
            # 默认使用的hrp为"lat"
         | 
| 951 957 | 
             
            encrypted_key_info = Platon::Key.encrypt key,"your_password"
         | 
| 952 958 |  | 
| 953 | 
            -
            # | 
| 959 | 
            +
            #or
         | 
| 954 960 |  | 
| 955 | 
            -
            Platon::Key. | 
| 961 | 
            +
            encrypted_key_info = Platon::Key.encrypt key,"your_password",{hrp:"atp"}
         | 
| 962 | 
            +
             | 
| 963 | 
            +
            ```
         | 
| 964 | 
            +
            ### 备份钱包且存储
         | 
| 956 965 |  | 
| 957 | 
            -
             | 
| 966 | 
            +
            备份钱包,输入密码加密得到json字符串,并存储于指定路径或默认路径。第三个参数为options,hash类型,可传参数有:  hrp ,keypath
         | 
| 958 967 |  | 
| 968 | 
            +
            ```ruby
         | 
| 969 | 
            +
            #使用默认地址:  ~/.platon/keystore ,默认hrp: "lat"
         | 
| 959 970 | 
             
            Platon::Key.encrypt_and_save key,"your_password" 
         | 
| 960 971 |  | 
| 972 | 
            +
            # or 
         | 
| 973 | 
            +
             | 
| 974 | 
            +
            Platon::Key.encrypt_and_save key,"your_password",{hrp:"atp",keypath:'./some/path.json'}
         | 
| 975 | 
            +
             | 
| 961 976 | 
             
            ```
         | 
| 962 977 |  | 
| 978 | 
            +
             | 
| 963 979 | 
             
            ### 恢复钱包 decrypt
         | 
| 964 | 
            -
            恢复钱包,输入密码得到key | 
| 980 | 
            +
            恢复钱包,输入密码得到key对象, 恢复钱包可适配任意hrp,无需指定hrp
         | 
| 965 981 |  | 
| 966 982 | 
             
            ```ruby
         | 
| 967 983 | 
             
            decrypted_key = Platon::Key.decrypt encrypted_key_info,"your_password"
         | 
| 968 984 |  | 
| 969 | 
            -
            # or
         | 
| 985 | 
            +
            # or 先读取指定路径的钱包文件
         | 
| 970 986 |  | 
| 971 987 | 
             
            decrypted_key = Platon::Key.decrypt File.read('./some/path.json'), 'your_password'
         | 
| 972 988 | 
             
            ```
         | 
| 973 989 |  | 
| 974 990 | 
             
            ###查询本地钱包 list_wallets
         | 
| 975 991 |  | 
| 992 | 
            +
            可传参数options,默认路径为 "~/.platon/keystore"
         | 
| 993 | 
            +
             | 
| 976 994 | 
             
            ```ruby
         | 
| 977 995 | 
             
            Platon::Key.list_wallets
         | 
| 978 996 |  | 
| 979 997 | 
             
            # or
         | 
| 980 998 |  | 
| 981 | 
            -
            Platon::Key.list_wallets("/your/wallet/path/")
         | 
| 999 | 
            +
            Platon::Key.list_wallets(keypath:"/your/wallet/path/")
         | 
| 982 1000 | 
             
            ```
         | 
| 983 1001 |  | 
| 984 1002 |  | 
| @@ -1040,7 +1058,7 @@ rake 'platon:contract:compile[./spec/fixtures/greeter.sol]' | |
| 1040 1058 |  | 
| 1041 1059 | 
             
            * 参数
         | 
| 1042 1060 | 
             
                * `Object`: 发起方的 Key 实例,通过 Platon::Key.new 创建或导入
         | 
| 1043 | 
            -
                * `Integer`: typ, 表示使用账户自由金额还是账户的锁仓金额做质押,0: 自由金额; 1: 锁仓金额
         | 
| 1061 | 
            +
                * `Integer`: typ, 表示使用账户自由金额还是账户的锁仓金额做质押,0: 自由金额; 1: 锁仓金额 2:优先使用锁仓余额,锁仓余额不足,则剩下使用自由金额
         | 
| 1044 1062 | 
             
                * `String`: benefitAddress,用于接受出块奖励和质押奖励的收益账户
         | 
| 1045 1063 | 
             
                * `String`: nodeId,被质押的节点Id(也叫候选人的节点Id)
         | 
| 1046 1064 | 
             
                * `String`: externalId,外部Id(有长度限制,给第三方拉取节点描述的Id)
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require "platon"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            puts "Example : generate key , print address and private_key"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            while true
         | 
| 6 | 
            +
            	puts ""
         | 
| 7 | 
            +
            	puts "Press any key to Generate keys.."
         | 
| 8 | 
            +
            	STDIN.readline
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            	key = Platon::Key.new
         | 
| 12 | 
            +
            	puts "Address on PlatON: #{key.bech32_address(hrp: "lat")}"
         | 
| 13 | 
            +
            	puts "Address on Alaya: #{key.bech32_address(hrp: "atp")}"
         | 
| 14 | 
            +
            	puts "EIP55 address: #{key.address}"
         | 
| 15 | 
            +
            	puts "PrivateKey: #{key.private_hex}"
         | 
| 16 | 
            +
            	puts "===================================="
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            ### Get Core Token(lat or atp) balance  
         | 
| 2 | 
            +
            ### Get Arc20/Prc20 balance
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require "platon"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ### Example on Alaya:
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            RPC = "http://127.0.0.1:6789" # change to your rpc address
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            TARGET_ADDRESS_1 = "atp1lsds5k5wys93vhm8gvkvepyx5e9hxtfz8w4r5x"
         | 
| 11 | 
            +
            TARGET_ADDRESS_2 = "atp1djc6dvd2y2kj04hhy30rmctkc9nnqmmzlk42uv"
         | 
| 12 | 
            +
             | 
| 13 | 
            +
             | 
| 14 | 
            +
            client = Platon::HttpClient.new(RPC,"alaya")
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ###Get Core Token(lat or atp) balance
         | 
| 17 | 
            +
            res =  client.platon_get_balance(TARGET_ADDRESS_1,"latest")
         | 
| 18 | 
            +
            balance = res / 10**18.to_f
         | 
| 19 | 
            +
            puts "#{TARGET_ADDRESS_1} #{client.hrp.upcase} balance: #{balance} "
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ###Get Arc20/Prc20 balance
         | 
| 22 | 
            +
            client.default_account = Platon::Key.new.bech32_address  # 随机生成地址并指定即可。 因platon节点要求call也必须传入from参数
         | 
| 23 | 
            +
            minABI=[{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"}];
         | 
| 24 | 
            +
            contract = Platon::Contract.create(
         | 
| 25 | 
            +
            	client:client, 
         | 
| 26 | 
            +
            	name: "MyContract", 
         | 
| 27 | 
            +
            	address: "atp16lellpkrv894hmg8am7ns3p2qny2vqj85ud8s6",  #ARC20 contract address
         | 
| 28 | 
            +
            	abi:minABI # Arc20 contract abi
         | 
| 29 | 
            +
            	)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            res2 =  contract.call.balance_of(TARGET_ADDRESS_2)
         | 
| 32 | 
            +
            aETH_balance = res2 / 10**18.to_f
         | 
| 33 | 
            +
            puts "#{TARGET_ADDRESS_2} aETH balance: #{aETH_balance}"
         | 
    
        data/lib/platon.rb
    CHANGED
    
    | @@ -9,8 +9,6 @@ require 'ffi' | |
| 9 9 | 
             
            require 'money-tree'
         | 
| 10 10 | 
             
            require 'rlp'
         | 
| 11 11 |  | 
| 12 | 
            -
            require 'bech32'
         | 
| 13 | 
            -
             | 
| 14 12 | 
             
            module Platon
         | 
| 15 13 |  | 
| 16 14 | 
             
              BYTE_ZERO = "\x00".freeze
         | 
| @@ -38,28 +36,29 @@ module Platon | |
| 38 36 | 
             
                end
         | 
| 39 37 | 
             
              end
         | 
| 40 38 |  | 
| 41 | 
            -
               | 
| 42 | 
            -
               | 
| 43 | 
            -
               | 
| 44 | 
            -
               | 
| 45 | 
            -
               | 
| 46 | 
            -
               | 
| 47 | 
            -
               | 
| 48 | 
            -
               | 
| 49 | 
            -
               | 
| 50 | 
            -
               | 
| 51 | 
            -
               | 
| 52 | 
            -
               | 
| 53 | 
            -
               | 
| 54 | 
            -
               | 
| 55 | 
            -
               | 
| 56 | 
            -
               | 
| 57 | 
            -
               | 
| 58 | 
            -
               | 
| 59 | 
            -
               | 
| 60 | 
            -
               | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 39 | 
            +
              require_relative 'platon/bech32'
         | 
| 40 | 
            +
              require_relative 'platon/abi'
         | 
| 41 | 
            +
              require_relative 'platon/client'
         | 
| 42 | 
            +
              require_relative 'platon/ipc_client'
         | 
| 43 | 
            +
              require_relative 'platon/http_client'
         | 
| 44 | 
            +
              require_relative 'platon/singleton'
         | 
| 45 | 
            +
              require_relative 'platon/solidity'
         | 
| 46 | 
            +
              require_relative 'platon/initializer'
         | 
| 47 | 
            +
              require_relative 'platon/contract'
         | 
| 48 | 
            +
              require_relative 'platon/explorer_url_helper'
         | 
| 49 | 
            +
              require_relative 'platon/function'
         | 
| 50 | 
            +
              require_relative 'platon/function_input'
         | 
| 51 | 
            +
              require_relative 'platon/function_output'
         | 
| 52 | 
            +
              require_relative 'platon/contract_event'
         | 
| 53 | 
            +
              require_relative 'platon/encoder'
         | 
| 54 | 
            +
              require_relative 'platon/decoder'
         | 
| 55 | 
            +
              require_relative 'platon/formatter'
         | 
| 56 | 
            +
              require_relative 'platon/transaction'
         | 
| 57 | 
            +
              require_relative 'platon/deployment'
         | 
| 58 | 
            +
              require_relative 'platon/contract_initializer'
         | 
| 59 | 
            +
              require_relative 'platon/railtie' if defined?(Rails)
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              require_relative 'platon/ppos'
         | 
| 63 62 |  | 
| 64 63 | 
             
              autoload :Address, 'platon/address'
         | 
| 65 64 | 
             
              autoload :Gas, 'platon/gas'
         | 
| 
            File without changes
         | 
    
        data/lib/platon/client.rb
    CHANGED
    
    | @@ -138,7 +138,7 @@ module Platon | |
| 138 138 | 
             
                  # end
         | 
| 139 139 |  | 
| 140 140 | 
             
                  payload = {jsonrpc: "2.0", method: command, params: encode_params(args), id: get_id}
         | 
| 141 | 
            -
                   | 
| 141 | 
            +
                  puts payload
         | 
| 142 142 | 
             
                  @logger.info("Sending #{payload.to_json}") if @log
         | 
| 143 143 | 
             
                  if @batch
         | 
| 144 144 | 
             
                    @batch << payload
         | 
| @@ -146,7 +146,7 @@ module Platon | |
| 146 146 | 
             
                  else
         | 
| 147 147 | 
             
                    # tmp = send_single(payload.to_json)
         | 
| 148 148 | 
             
                    # output = JSON.parse(tmp)
         | 
| 149 | 
            -
                    output = JSON.parse(send_single(payload.to_json))
         | 
| 149 | 
            +
                    p output = JSON.parse(send_single(payload.to_json))
         | 
| 150 150 | 
             
                    @logger.info("Received #{output.to_json}") if @log
         | 
| 151 151 | 
             
                    reset_id
         | 
| 152 152 | 
             
                    raise IOError, output["error"]["message"] if output["error"]
         | 
    
        data/lib/platon/contract.rb
    CHANGED
    
    | @@ -11,10 +11,6 @@ module Platon | |
| 11 11 | 
             
                attr_accessor :call_raw_proxy, :call_proxy, :transact_proxy, :transact_and_wait_proxy
         | 
| 12 12 | 
             
                attr_accessor :new_filter_proxy, :get_filter_logs_proxy, :get_filter_change_proxy
         | 
| 13 13 |  | 
| 14 | 
            -
                def self.hello
         | 
| 15 | 
            -
                  puts 111
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
             | 
| 18 14 | 
             
                def initialize(name, code, abi, client = Platon::Singleton.instance)
         | 
| 19 15 | 
             
                  @name = name
         | 
| 20 16 | 
             
                  @code = code
         | 
    
        data/lib/platon/key.rb
    CHANGED
    
    | @@ -5,10 +5,10 @@ module Platon | |
| 5 5 |  | 
| 6 6 | 
             
                attr_reader :private_key, :public_key
         | 
| 7 7 |  | 
| 8 | 
            -
                def self.encrypt(key, password)
         | 
| 8 | 
            +
                def self.encrypt(key, password,options={})
         | 
| 9 9 | 
             
                  key = new(priv: key) unless key.is_a?(Key)
         | 
| 10 10 |  | 
| 11 | 
            -
                  Encrypter.perform key.private_hex, password
         | 
| 11 | 
            +
                  Encrypter.perform key.private_hex, password ,options
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 14 | 
             
                def self.decrypt(data, password)
         | 
| @@ -16,9 +16,10 @@ module Platon | |
| 16 16 | 
             
                  new priv: priv
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 | 
            -
                def self.encrypt_and_save(key,password, | 
| 20 | 
            -
                  encrypted_key_info = encrypt(key,password)
         | 
| 19 | 
            +
                def self.encrypt_and_save(key,password,options={})
         | 
| 20 | 
            +
                  encrypted_key_info = encrypt(key,password,options)
         | 
| 21 21 | 
             
                  ## PlatON似乎打算兼容以太地址, 暂时默认以 0x 地址命名 
         | 
| 22 | 
            +
                  keypath = options[:keypath]
         | 
| 22 23 | 
             
                  if keypath==nil || keypath=="" 
         | 
| 23 24 | 
             
                    address = key.address
         | 
| 24 25 | 
             
                    dirname = "#{ENV['HOME']}/.platon/keystore/"
         | 
| @@ -30,7 +31,8 @@ module Platon | |
| 30 31 | 
             
                  return encrypted_key_info
         | 
| 31 32 | 
             
                end
         | 
| 32 33 |  | 
| 33 | 
            -
                def self.list_wallets( | 
| 34 | 
            +
                def self.list_wallets(options={})
         | 
| 35 | 
            +
                  keypath = options[:keypath]
         | 
| 34 36 | 
             
                  if keypath==nil || keypath=="" 
         | 
| 35 37 | 
             
                    Dir.glob("#{ENV['HOME']}/.platon/keystore/*").select { |e| File.file? e }
         | 
| 36 38 | 
             
                  else
         | 
| @@ -64,8 +66,8 @@ module Platon | |
| 64 66 | 
             
                  Utils.public_key_to_address public_hex
         | 
| 65 67 | 
             
                end
         | 
| 66 68 |  | 
| 67 | 
            -
                def bech32_address(hrp:" | 
| 68 | 
            -
                  Utils.to_bech32_address(hrp,address) | 
| 69 | 
            +
                def bech32_address(hrp:"lat")
         | 
| 70 | 
            +
                  Utils.to_bech32_address(hrp,address)
         | 
| 69 71 | 
             
                end
         | 
| 70 72 | 
             
                alias_method :to_address, :address
         | 
| 71 73 |  | 
    
        data/lib/platon/key/encrypter.rb
    CHANGED
    
    
    
        data/lib/platon/open_ssl.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ module Platon | |
| 9 9 | 
             
                  ffi_lib 'libeay32', 'ssleay32'
         | 
| 10 10 | 
             
                else
         | 
| 11 11 | 
             
                  ffi_lib [
         | 
| 12 | 
            -
                    'libssl.so.1.1.0', 'libssl.so.1.1',
         | 
| 12 | 
            +
                    'libssl.so.1.1.0', 'libssl.so.1.1', 'libssl.1.1',
         | 
| 13 13 | 
             
                    'libssl.so.1.0.0', 'libssl.so.10',
         | 
| 14 14 | 
             
                    'ssl'
         | 
| 15 15 | 
             
                  ]
         | 
| @@ -55,22 +55,21 @@ module Platon | |
| 55 55 | 
             
                # @return [Integer] version number as an integer.
         | 
| 56 56 | 
             
                def self.version
         | 
| 57 57 | 
             
                  if self.respond_to?(:OpenSSL_version_num)
         | 
| 58 | 
            -
                    OpenSSL_version_num()
         | 
| 58 | 
            +
                    OpenSSL_version_num()    
         | 
| 59 59 | 
             
                  else
         | 
| 60 | 
            -
                    SSLeay | 
| 60 | 
            +
                    # Hardcode here: OpenSSL verson > 1.1 should < 269484032 . But on MacOS ,version 1.0.2 ,SSLeay returns 536870912 ,that is v2.0.0  
         | 
| 61 | 
            +
                    [SSLeay(),269484031].min
         | 
| 61 62 | 
             
                  end
         | 
| 62 63 | 
             
                end
         | 
| 63 64 |  | 
| 64 | 
            -
                 | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
                 | 
| 68 | 
            -
                # else
         | 
| 69 | 
            -
             | 
| 65 | 
            +
                if version >= VERSION_1_1_0_NUM
         | 
| 66 | 
            +
                  # Initialization procedure for the library was changed in OpenSSL 1.1.0
         | 
| 67 | 
            +
                  attach_function :OPENSSL_init_ssl, [:uint64, :pointer], :int
         | 
| 68 | 
            +
                else
         | 
| 70 69 | 
             
                  attach_function :SSL_library_init, [], :int
         | 
| 71 70 | 
             
                  attach_function :ERR_load_crypto_strings, [], :void
         | 
| 72 71 | 
             
                  attach_function :SSL_load_error_strings, [], :void
         | 
| 73 | 
            -
                 | 
| 72 | 
            +
                end
         | 
| 74 73 |  | 
| 75 74 | 
             
                attach_function :RAND_poll, [], :int
         | 
| 76 75 | 
             
                attach_function :BN_CTX_free, [:pointer], :int
         | 
| @@ -227,16 +226,16 @@ module Platon | |
| 227 226 | 
             
                  def init_ffi_ssl
         | 
| 228 227 | 
             
                    return if @ssl_loaded
         | 
| 229 228 |  | 
| 230 | 
            -
                     | 
| 231 | 
            -
                       | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 234 | 
            -
                       | 
| 235 | 
            -
                     | 
| 229 | 
            +
                    if version >= VERSION_1_1_0_NUM
         | 
| 230 | 
            +
                      OPENSSL_init_ssl(
         | 
| 231 | 
            +
                        OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_ENGINE_ALL_BUILTIN,
         | 
| 232 | 
            +
                        nil
         | 
| 233 | 
            +
                      )
         | 
| 234 | 
            +
                    else
         | 
| 236 235 | 
             
                      SSL_library_init()
         | 
| 237 236 | 
             
                      ERR_load_crypto_strings()
         | 
| 238 237 | 
             
                      SSL_load_error_strings()
         | 
| 239 | 
            -
                     | 
| 238 | 
            +
                    end
         | 
| 240 239 |  | 
| 241 240 | 
             
                    RAND_poll()
         | 
| 242 241 | 
             
                    @ssl_loaded = true
         | 
    
        data/lib/platon/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: platon
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.9
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - vianull
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-07-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -169,10 +169,12 @@ files: | |
| 169 169 | 
             
            - bin/console
         | 
| 170 170 | 
             
            - bin/setup
         | 
| 171 171 | 
             
            - doc/zh-cn.md
         | 
| 172 | 
            -
            -  | 
| 172 | 
            +
            - examples/generate_keys.rb
         | 
| 173 | 
            +
            - examples/get_balance.rb
         | 
| 173 174 | 
             
            - lib/platon.rb
         | 
| 174 175 | 
             
            - lib/platon/abi.rb
         | 
| 175 176 | 
             
            - lib/platon/address.rb
         | 
| 177 | 
            +
            - lib/platon/bech32.rb
         | 
| 176 178 | 
             
            - lib/platon/client.rb
         | 
| 177 179 | 
             
            - lib/platon/contract.rb
         | 
| 178 180 | 
             
            - lib/platon/contract_event.rb
         | 
| @@ -207,7 +209,6 @@ files: | |
| 207 209 | 
             
            - lib/tasks/platon_contract.rake
         | 
| 208 210 | 
             
            - platon-ruby-logo.png
         | 
| 209 211 | 
             
            - platon.gemspec
         | 
| 210 | 
            -
            - platon.gemspec.bak
         | 
| 211 212 | 
             
            homepage:
         | 
| 212 213 | 
             
            licenses:
         | 
| 213 214 | 
             
            - MIT
         |