klaytn 0.0.7 → 0.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50c121f73a117ce320b51711e4e8e46cfbc2150598abb0c6ca2052b7c21b8aad
4
- data.tar.gz: c89c246919725c7ad34ca11e0e48a25f11b9b52592469b78e61c94f5685107a5
3
+ metadata.gz: 104348459f6c2ddacedc247f7332cf17f859f11a29ae52bd1bd52f866e9208b3
4
+ data.tar.gz: 0c2494aa524a6088b1e9f3f54729a668dfcd0b2a61c69c52e15a4b3082184f13
5
5
  SHA512:
6
- metadata.gz: c75da347b268c6bfd60898c8b87801e1bf6a9b4cbb12dbcc56bc36574ece135615180c0fbdc81401c285b3ef20155602eab1d996b0ca6d39f56b92cef6262d4d
7
- data.tar.gz: 64e87aa587720212bf30885c46e12c723e19cd6fa7d44fe3c712226a6d576c0c88adf96a89b20319da937d688c859e2d76be800461490b092637292d703e7d67
6
+ metadata.gz: 874a809cceb44239aebfa05d50a9cf3369ddabfde41ff855a3d24c1e25ea4fd8c77a646260e303139f9689ae6c3cc0130ba858156aa85527b1425d30722e785e
7
+ data.tar.gz: 984aa44b345566a9e0787171840432f67a8578db3ded083034e1e3a3025a7de9550f31b6a61023223fc6d4d736931e5e13bb4f5ab053c955c447dde8a3f6cf63
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  .env
13
+ .ruby-version
data/Gemfile.lock CHANGED
@@ -1,30 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- klaytn (0.0.6)
5
- ethereum.rb (~> 2.5)
4
+ klaytn (0.0.7)
5
+ activesupport (>= 4.2)
6
6
  httparty (~> 0.20.0)
7
+ keccak (~> 1.3)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- activesupport (6.1.4.6)
12
+ activesupport (7.0.2.2)
12
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
14
  i18n (>= 1.6, < 2)
14
15
  minitest (>= 5.1)
15
16
  tzinfo (~> 2.0)
16
- zeitwerk (~> 2.3)
17
17
  concurrent-ruby (1.1.9)
18
18
  diff-lcs (1.5.0)
19
- digest-sha3 (1.1.0)
20
- ethereum.rb (2.5)
21
- activesupport (>= 4.0)
22
- digest-sha3 (~> 1.1)
23
19
  httparty (0.20.0)
24
20
  mime-types (~> 3.0)
25
21
  multi_xml (>= 0.5.2)
26
22
  i18n (1.10.0)
27
23
  concurrent-ruby (~> 1.0)
24
+ keccak (1.3.0)
28
25
  mime-types (3.4.1)
29
26
  mime-types-data (~> 3.2015)
30
27
  mime-types-data (3.2022.0105)
@@ -46,7 +43,6 @@ GEM
46
43
  rspec-support (3.11.0)
47
44
  tzinfo (2.0.4)
48
45
  concurrent-ruby (~> 1.0)
49
- zeitwerk (2.5.4)
50
46
 
51
47
  PLATFORMS
52
48
  ruby
@@ -57,4 +53,4 @@ DEPENDENCIES
57
53
  rspec (~> 3.0)
58
54
 
59
55
  BUNDLED WITH
60
- 2.1.4
56
+ 2.2.33
data/klaytn.gemspec CHANGED
@@ -31,7 +31,13 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ["lib", "bin"]
33
33
 
34
+
34
35
  spec.add_development_dependency "rspec", "~> 3.9.1"
36
+
37
+ spec.add_dependency "activesupport", ">= 4.2"
35
38
  spec.add_dependency "httparty", "~> 0.20.0"
36
- spec.add_dependency "ethereum.rb", "~> 2.5"
39
+ spec.add_dependency "keccak", "~> 1.3" # https://github.com/q9f/keccak.rb
40
+
41
+ # spec.add_dependency "ethereum.rb", "~> 2.5"
42
+
37
43
  end
@@ -31,7 +31,7 @@ module Klaytn
31
31
 
32
32
  ## DEPRECATE: definition ex: 'addAddressToWhitelist(address)' - string literal Solidity function definition
33
33
  # definition ex: 'addAddressToWhitelist' - string literal Solidity function definition, without parameters/parens
34
- # inputs ex: [ OpenStruct.new({ "internalType": "address", "name": "addr", "type": "address" }) ] - array of dot-notation object from ABI
34
+ # inputs ex: [OpenStruct.new({ "internalType": "address", "name": "addr", "type": "address" })] - array of dot-notation object from ABI
35
35
  # params ex: ['0x0xxxx'] - array of arguments accepted by function
36
36
 
37
37
  def invoke_function(definition, params)
@@ -1,7 +1,15 @@
1
1
  module Klaytn
2
2
  class Decoder
3
- def decode_uint(encoded_uint) # ex: 0x4563918244f40000 => 5000000000000000000 (5 KLAY)
4
- Ethereum::Decoder.new.decode_uint(encoded_uint)
3
+ def decode_uint(value, subtype = "256", start = 0) # ex: 0x4563918244f40000 => 5000000000000000000 (5 KLAY)
4
+ trim(value, start, bitsize(subtype)).hex
5
+ end
6
+
7
+ def trim(value, start, bitsize = 256)
8
+ value[start+63-(bitsize/4-1)..start+63]
9
+ end
10
+
11
+ def bitsize(subtype, default = 256)
12
+ subtype.present? ? subtype.to_i : default
5
13
  end
6
14
  end
7
15
  end
@@ -2,16 +2,135 @@ module Klaytn
2
2
  class Encoder
3
3
  def encode_function(definition, inputs, params)
4
4
  prefix = '0x'
5
- str = Ethereum::Function.calc_id(definition) # ex: "getEarnout(uint256)"
6
- num = Ethereum::Encoder.new.encode_arguments(inputs, params) # ex: [1], or [1,500]
5
+ str = Digest::Keccak.hexdigest(definition, 256)[0..7] # ex: "getEarnout(uint256)"
6
+ num = encode_arguments(inputs, params)
7
7
 
8
8
  "#{prefix}#{str}#{num}"
9
9
  end
10
10
 
11
- def encode_uint(integer) # ex: 5000000000000000000 (5 KLAY) => 0x4563918244f40000
11
+ def encode_integer(integer) # ex: 5000000000000000000 (5 KLAY) => 0x4563918244f40000
12
12
  return '0x0' if integer.zero?
13
- long = Ethereum::Encoder.new.encode_uint(integer)
13
+ long = encode_uint(integer)
14
14
  '0x' + long.sub!(/^[0]+/,'')
15
15
  end
16
+
17
+ # code below this point was adopted from ethereum.rb gem in order to
18
+ # avoid dependency issues with Digest requiring older Ruby versions
19
+ def encode(type, value)
20
+ is_array, arity, array_subtype = parse_array_type(type)
21
+ if is_array && arity
22
+ encode_static_array(arity, array_subtype, value)
23
+ elsif is_array
24
+ encode_dynamic_array(array_subtype, value)
25
+ else
26
+ core, subtype = parse_type(type)
27
+ method_name = "encode_#{core}".to_sym
28
+ self.send(method_name, value, subtype)
29
+ end
30
+ end
31
+
32
+ def encode_static_array(arity, array_subtype, array)
33
+ raise "Wrong number of arguments" if arity != array.size
34
+ array.inject("") { |a, e| a << encode(array_subtype, e) }
35
+ end
36
+
37
+ def encode_dynamic_array(array_subtype, array)
38
+ location = encode_uint(@inputs ? size_of_inputs(@inputs) + @tail.size/2 : 32)
39
+ size = encode_uint(array.size)
40
+ data = array.inject("") { |a, e| a << encode(array_subtype, e) }
41
+ [location, size + data]
42
+ end
43
+
44
+ def parse_array_type(type)
45
+ match = /(.+)\[(\d*)\]\z/.match(type)
46
+ if match
47
+ [true, match[2].present? ? match[2].to_i : nil, match[1]]
48
+ else
49
+ [false, nil, nil]
50
+ end
51
+ end
52
+
53
+ def parse_type(type)
54
+ puts "TYPE: #{type}"
55
+ # raise NotImplementedError if type.ends_with?("]")
56
+ raise NotImplementedError if type[-1] == "]"
57
+ match = /(\D+)(\d.*)?/.match(type)
58
+ [match[1], match[2]]
59
+ end
60
+
61
+ def encode_arguments(inputs, args)
62
+ raise "Wrong number of arguments" if inputs.length != args.length
63
+ @head = ""
64
+ @tail = ""
65
+ @inputs = inputs
66
+ inputs.each.with_index do |input, index|
67
+ encoded = encode(input.type, args[index])
68
+ if encoded.is_a? Array
69
+ @head << encoded[0]
70
+ @tail << encoded[1]
71
+ else
72
+ @head << encoded
73
+ end
74
+ end
75
+ @head + @tail
76
+ end
77
+
78
+ def encode_bool(value, _)
79
+ (value ? "1" : "0").rjust(64, '0')
80
+ end
81
+
82
+ def encode_fixed(value, subtype)
83
+ n = subtype.nil? ? 128 : /(\d+)x(\d+)/.match(subtype)[2].to_i
84
+ do_encode_fixed(value, n)
85
+ end
86
+
87
+ def do_encode_fixed(value, n)
88
+ encode_uint((value * 2**n).to_i)
89
+ end
90
+
91
+ def encode_ufixed(_value, _)
92
+ raise NotImplementedError
93
+ end
94
+
95
+ def encode_bytes(value, subtype)
96
+ subtype.nil? ? encode_dynamic_bytes(value) : encode_static_bytes(value)
97
+ end
98
+
99
+ def encode_static_bytes(value)
100
+ value.bytes.map {|x| x.to_s(16).rjust(2, '0')}.join("").ljust(64, '0')
101
+ end
102
+
103
+ def encode_dynamic_bytes(value)
104
+ location = encode_uint(@inputs ? size_of_inputs(@inputs) + @tail.size/2 : 32)
105
+ size = encode_uint(value.size)
106
+ content = encode_static_bytes(value)
107
+ [location, size + content]
108
+ end
109
+
110
+ def encode_string(value, _)
111
+ location = encode_uint(@inputs ? size_of_inputs(@inputs) + @tail.size/2 : 32)
112
+ size = encode_uint(value.bytes.size)
113
+ content = value.bytes.map {|x| x.to_s(16).rjust(2, '0')}.join("").ljust(64, '0')
114
+ [location, size + content]
115
+ end
116
+
117
+ def encode_address(value, _)
118
+ value = "0" * 24 + value.gsub(/^0x/,'')
119
+ raise ArgumentError if value.size != 64
120
+ value
121
+ end
122
+
123
+ def encode_uint(value, _ = nil)
124
+ raise ArgumentError if value < 0
125
+ encode_int(value)
126
+ end
127
+
128
+ def encode_int(value, _ = nil)
129
+ to_twos_complement(value).to_s(16).rjust(64, '0')
130
+ end
131
+
132
+ def to_twos_complement(number)
133
+ (number & ((1 << 256) - 1))
134
+ end
16
135
  end
17
136
  end
data/lib/klaytn/token.rb CHANGED
@@ -18,7 +18,7 @@ module Klaytn
18
18
  end
19
19
 
20
20
  def encoded_token_id(token_id)
21
- encoder.encode_uint(token_id)
21
+ encoder.encode_integer(token_id)
22
22
  end
23
23
  end
24
24
  end
@@ -23,7 +23,7 @@ module Klaytn
23
23
  body = {
24
24
  from: kas_account_wallet_address,
25
25
  to: address,
26
- value: encoder.encode_uint(amount_in_peb), # '0x0' = 0 KLAY, '0x4563918244f40000' = 5 KLAY
26
+ value: encoder.encode_integer(amount_in_peb), # '0x0' = 0 KLAY, '0x4563918244f40000' = 5 KLAY
27
27
  memo: opts[:memo], # can be a text note; viewable on Klaytn Scope!
28
28
  gas: opts[:gas] || 200000, # not required, default is 1,000,000 if excluded
29
29
  submit: should_submit?(opts) # create real transaction by default
@@ -1,3 +1,3 @@
1
1
  module Klaytn
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
data/lib/klaytn.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'klaytn/version'
2
2
  require 'httparty'
3
- require 'ethereum.rb'
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+ require 'digest/keccak'
4
6
 
5
7
  module Klaytn
6
8
  require 'klaytn/authentication'
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klaytn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Kulp
8
8
  - Ooju
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
12
  date: 2022-03-05 00:00:00.000000000 Z
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: 3.9.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: activesupport
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '4.2'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '4.2'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: httparty
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -40,19 +54,19 @@ dependencies:
40
54
  - !ruby/object:Gem::Version
41
55
  version: 0.20.0
42
56
  - !ruby/object:Gem::Dependency
43
- name: ethereum.rb
57
+ name: keccak
44
58
  requirement: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - "~>"
47
61
  - !ruby/object:Gem::Version
48
- version: '2.5'
62
+ version: '1.3'
49
63
  type: :runtime
50
64
  prerelease: false
51
65
  version_requirements: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
- version: '2.5'
69
+ version: '1.3'
56
70
  description: Interact with transactions, smart contracts, and NFTs on the Klaytn blockchain
57
71
  in pure Ruby.
58
72
  email:
@@ -91,7 +105,7 @@ metadata:
91
105
  homepage_uri: https://github.com/OojuTeam/klaytn-ruby
92
106
  source_code_uri: https://github.com/OojuTeam/klaytn-ruby
93
107
  changelog_uri: https://github.com/usefomo/fomo-ruby-sdk/releases
94
- post_install_message:
108
+ post_install_message:
95
109
  rdoc_options: []
96
110
  require_paths:
97
111
  - lib
@@ -107,8 +121,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
121
  - !ruby/object:Gem::Version
108
122
  version: '0'
109
123
  requirements: []
110
- rubygems_version: 3.0.3
111
- signing_key:
124
+ rubygems_version: 3.2.32
125
+ signing_key:
112
126
  specification_version: 4
113
127
  summary: Klaytn is a Ruby wrapper for the Klaytn blockchain.
114
128
  test_files: []