klay 0.0.2 → 0.0.5
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/AUTHORS.txt +5 -4
- data/LICENSE.txt +0 -1
- data/README.md +30 -84
- data/bin/setup +1 -1
- data/klay.gemspec +1 -1
- data/lib/klay/abi/type.rb +8 -8
- data/lib/klay/abi.rb +7 -7
- data/lib/klay/address.rb +5 -5
- data/lib/klay/api.rb +84 -84
- data/lib/klay/chain.rb +2 -2
- data/lib/klay/client/http.rb +2 -2
- data/lib/klay/client/ipc.rb +2 -2
- data/lib/klay/client.rb +18 -18
- data/lib/klay/constant.rb +2 -2
- data/lib/klay/eip712.rb +2 -2
- data/lib/klay/key/decrypter.rb +9 -9
- data/lib/klay/key/encrypter.rb +8 -8
- data/lib/klay/key.rb +12 -12
- data/lib/klay/rlp/decoder.rb +3 -3
- data/lib/klay/rlp/encoder.rb +4 -4
- data/lib/klay/rlp/sedes/big_endian_int.rb +2 -2
- data/lib/klay/rlp/sedes/binary.rb +3 -3
- data/lib/klay/rlp/sedes/list.rb +2 -2
- data/lib/klay/rlp/sedes.rb +6 -6
- data/lib/klay/rlp.rb +4 -4
- data/lib/klay/signature.rb +10 -11
- data/lib/klay/tx/eip1559.rb +9 -9
- data/lib/klay/tx/eip2930.rb +9 -9
- data/lib/klay/tx/legacy.rb +9 -9
- data/lib/klay/tx.rb +7 -7
- data/lib/klay/unit.rb +9 -21
- data/lib/klay/util.rb +5 -5
- data/lib/klay/version.rb +4 -4
- data/lib/klay.rb +3 -3
- metadata +2 -4
- data/.github/workflows/codeql.yml +0 -48
- data/.github/workflows/docs.yml +0 -26
data/lib/klay/client/ipc.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
require "socket"
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides an IPC-RPC client.
|
data/lib/klay/client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,10 +12,10 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
# Provides the {
|
15
|
+
# Provides the {Klay} module.
|
16
16
|
module Klay
|
17
17
|
|
18
|
-
# Provides the {
|
18
|
+
# Provides the {Klay::Client} super-class to connect to Klaytn
|
19
19
|
# network's RPC-API endpoints (IPC or HTTP).
|
20
20
|
class Client
|
21
21
|
|
@@ -41,8 +41,8 @@ module Klay
|
|
41
41
|
# an IPC path.
|
42
42
|
#
|
43
43
|
# @param host [String] either an HTTP/S host or an IPC path.
|
44
|
-
# @return [
|
45
|
-
# @return [
|
44
|
+
# @return [Klay::Client::Ipc] an IPC client.
|
45
|
+
# @return [Klay::Client::Http] an HTTP client.
|
46
46
|
# @raise [ArgumentError] in case it cannot determine the client type.
|
47
47
|
def self.create(host)
|
48
48
|
return Client::Ipc.new host if host.end_with? ".ipc"
|
@@ -50,7 +50,7 @@ module Klay
|
|
50
50
|
raise ArgumentError, "Unable to detect client type!"
|
51
51
|
end
|
52
52
|
|
53
|
-
# Constructor for the {
|
53
|
+
# Constructor for the {Klay::Client} super-class. Should not be used;
|
54
54
|
# use {Client.create} intead.
|
55
55
|
def initialize(_)
|
56
56
|
@id = 0
|
@@ -61,7 +61,7 @@ module Klay
|
|
61
61
|
|
62
62
|
# Gets the default account (coinbase) of the connected client.
|
63
63
|
#
|
64
|
-
# @return [
|
64
|
+
# @return [Klay::Address] the coinbase account address.
|
65
65
|
def default_account
|
66
66
|
@default_account ||= Address.new eth_coinbase["result"]
|
67
67
|
end
|
@@ -75,7 +75,7 @@ module Klay
|
|
75
75
|
|
76
76
|
# Gets the balance for an address.
|
77
77
|
#
|
78
|
-
# @param address [
|
78
|
+
# @param address [Klay::Address] the address to get the balance for.
|
79
79
|
# @return [Integer] the balance in Wei.
|
80
80
|
def get_balance(address)
|
81
81
|
eth_get_balance(address)["result"].to_i 16
|
@@ -83,32 +83,32 @@ module Klay
|
|
83
83
|
|
84
84
|
# Gets the next nonce for an address used to draft new transactions.
|
85
85
|
#
|
86
|
-
# @param address [
|
86
|
+
# @param address [Klay::Address] the address to get the nonce for.
|
87
87
|
# @return [Integer] the next nonce to be used.
|
88
88
|
def get_nonce(address)
|
89
89
|
eth_get_transaction_count(address, "pending")["result"].to_i 16
|
90
90
|
end
|
91
91
|
|
92
|
-
# Simply transfer
|
92
|
+
# Simply transfer Klay to an account and waits for it to be mined.
|
93
93
|
# Uses `eth_coinbase` and external signer if no sender key is
|
94
94
|
# provided.
|
95
95
|
#
|
96
|
-
# @param destination [
|
96
|
+
# @param destination [Klay::Address] the destination address.
|
97
97
|
# @param amount [Integer] the transfer amount in Wei.
|
98
|
-
# @param sender_key [
|
98
|
+
# @param sender_key [Klay::Key] the sender private key.
|
99
99
|
# @param legacy [Boolean] enables legacy transactions (pre-EIP-1559).
|
100
100
|
# @return [String] the transaction hash.
|
101
101
|
def transfer_and_wait(destination, amount, sender_key = nil, legacy = false)
|
102
102
|
wait_for_tx(transfer(destination, amount, sender_key, legacy))
|
103
103
|
end
|
104
104
|
|
105
|
-
# Simply transfer
|
105
|
+
# Simply transfer Klay to an account without any call data or
|
106
106
|
# access lists attached. Uses `eth_coinbase` and external signer
|
107
107
|
# if no sender key is provided.
|
108
108
|
#
|
109
|
-
# @param destination [
|
109
|
+
# @param destination [Klay::Address] the destination address.
|
110
110
|
# @param amount [Integer] the transfer amount in Wei.
|
111
|
-
# @param sender_key [
|
111
|
+
# @param sender_key [Klay::Key] the sender private key.
|
112
112
|
# @param legacy [Boolean] enables legacy transactions (pre-EIP-1559).
|
113
113
|
# @return [String] the transaction hash.
|
114
114
|
def transfer(destination, amount, sender_key = nil, legacy = false)
|
@@ -135,7 +135,7 @@ module Klay
|
|
135
135
|
from: sender_key.address,
|
136
136
|
nonce: get_nonce(sender_key.address),
|
137
137
|
})
|
138
|
-
tx =
|
138
|
+
tx = Klay::Tx.new(params)
|
139
139
|
tx.sign sender_key
|
140
140
|
return eth_send_raw_transaction(tx.hex)["result"]
|
141
141
|
else
|
@@ -183,7 +183,7 @@ module Klay
|
|
183
183
|
end
|
184
184
|
|
185
185
|
# Metafunction to provide all known RPC commands defined in
|
186
|
-
#
|
186
|
+
# Klay::Api as snake_case methods to the Klay::Client classes.
|
187
187
|
Api::COMMANDS.each do |cmd|
|
188
188
|
method_name = cmd.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
189
189
|
define_method method_name do |*args|
|
@@ -195,7 +195,7 @@ module Klay
|
|
195
195
|
|
196
196
|
# Prepares parameters and sends the command to the client.
|
197
197
|
def send_command(command, args)
|
198
|
-
args << "latest" if ["
|
198
|
+
args << "latest" if ["klay_getBalance", "klay_call"].include? command
|
199
199
|
payload = {
|
200
200
|
jsonrpc: "2.0",
|
201
201
|
method: command,
|
data/lib/klay/constant.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# -*- encoding : ascii-8bit -*-
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides commonly used constants, such as zero bytes or zero keys.
|
data/lib/klay/eip712.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,7 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
# Provides the {
|
15
|
+
# Provides the {Klay} module.
|
16
16
|
module Klay
|
17
17
|
|
18
18
|
# Defines handy tools for encoding typed structured data as per EIP-712.
|
data/lib/klay/key/decrypter.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,27 +12,27 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
# Provides the {
|
15
|
+
# Provides the {Klay} module.
|
16
16
|
module Klay
|
17
17
|
|
18
|
-
# The {
|
18
|
+
# The {Klay::Key::Decrypter} class to handle PBKDF2-SHA-256 decryption.
|
19
19
|
class Key::Decrypter
|
20
20
|
|
21
21
|
# Provides a specific decrypter error if decryption fails.
|
22
22
|
class DecrypterError < StandardError; end
|
23
23
|
|
24
|
-
# Class method {
|
24
|
+
# Class method {Klay::Key::Decrypter.perform} to perform an keystore
|
25
25
|
# decryption.
|
26
26
|
#
|
27
27
|
# @param data [JSON] encryption data including cypherkey.
|
28
28
|
# @param password [String] password to decrypt the key.
|
29
|
-
# @return [
|
29
|
+
# @return [Klay::Key] decrypted key-pair.
|
30
30
|
def self.perform(data, password)
|
31
31
|
new(data, password).perform
|
32
32
|
end
|
33
33
|
|
34
|
-
# Constructor of the {
|
35
|
-
# decryption. Should not be used; use {
|
34
|
+
# Constructor of the {Klay::Key::Decrypter} class for secret key
|
35
|
+
# decryption. Should not be used; use {Klay::Key::Decrypter.perform}
|
36
36
|
# instead.
|
37
37
|
#
|
38
38
|
# @param data [JSON] encryption data including cypherkey.
|
@@ -45,12 +45,12 @@ module Klay
|
|
45
45
|
|
46
46
|
# Method to decrypt key using password.
|
47
47
|
#
|
48
|
-
# @return [
|
48
|
+
# @return [Klay::Key] decrypted key.
|
49
49
|
def perform
|
50
50
|
derive_key password
|
51
51
|
check_macs
|
52
52
|
private_key = Util.bin_to_hex decrypted_data
|
53
|
-
|
53
|
+
Klay::Key.new priv: private_key
|
54
54
|
end
|
55
55
|
|
56
56
|
private
|
data/lib/klay/key/encrypter.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,19 +12,19 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
# Provides the {
|
15
|
+
# Provides the {Klay} module.
|
16
16
|
module Klay
|
17
17
|
|
18
|
-
# The {
|
18
|
+
# The {Klay::Key::Encrypter} class to handle PBKDF2-SHA-256 encryption.
|
19
19
|
class Key::Encrypter
|
20
20
|
|
21
21
|
# Provides a specific encrypter error if decryption fails.
|
22
22
|
class EncrypterError < StandardError; end
|
23
23
|
|
24
|
-
# Class method {
|
24
|
+
# Class method {Klay::Key::Encrypter.perform} to performa an key-store
|
25
25
|
# encryption.
|
26
26
|
#
|
27
|
-
# @param key [
|
27
|
+
# @param key [Klay::Key] representing a secret key-pair used for encryption.
|
28
28
|
# @param options [Hash] the options to encrypt with.
|
29
29
|
# @option options [String] :kdf key derivation function defaults to pbkdf2.
|
30
30
|
# @option options [String] :id uuid given to the secret key.
|
@@ -38,11 +38,11 @@ module Klay
|
|
38
38
|
new(key, options).perform(password)
|
39
39
|
end
|
40
40
|
|
41
|
-
# Constructor of the {
|
42
|
-
# encryption. Should not be used; use {
|
41
|
+
# Constructor of the {Klay::Key::Encrypter} class for secret key
|
42
|
+
# encryption. Should not be used; use {Klay::Key::Encrypter.perform}
|
43
43
|
# instead.
|
44
44
|
#
|
45
|
-
# @param key [
|
45
|
+
# @param key [Klay::Key] representing a secret key-pair used for encryption.
|
46
46
|
# @param options [Hash] the options to encrypt with.
|
47
47
|
# @option options [String] :kdf key derivation function defaults to pbkdf2.
|
48
48
|
# @option options [String] :id uuid given to the secret key.
|
data/lib/klay/key.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -18,25 +18,25 @@ require "rbsecp256k1"
|
|
18
18
|
require "scrypt"
|
19
19
|
require "securerandom"
|
20
20
|
|
21
|
-
# Provides the {
|
21
|
+
# Provides the {Klay} module.
|
22
22
|
module Klay
|
23
23
|
|
24
|
-
# The {
|
24
|
+
# The {Klay::Key} class to handle Secp256k1 private/public key-pairs.
|
25
25
|
class Key
|
26
26
|
|
27
|
-
# The {
|
27
|
+
# The {Klay::Key::Decrypter} class to handle PBKDF2-SHA-256 decryption.
|
28
28
|
autoload :Decrypter, "eth/key/decrypter"
|
29
29
|
|
30
|
-
# The {
|
30
|
+
# The {Klay::Key::Encrypter} class to handle PBKDF2-SHA-256 encryption.
|
31
31
|
autoload :Encrypter, "eth/key/encrypter"
|
32
32
|
|
33
|
-
# The `Secp256k1::PrivateKey` of the {
|
33
|
+
# The `Secp256k1::PrivateKey` of the {Klay::Key} pair.
|
34
34
|
attr_reader :private_key
|
35
35
|
|
36
|
-
# The `Secp256k1::PublicKey` of the {
|
36
|
+
# The `Secp256k1::PublicKey` of the {Klay::Key} pair.
|
37
37
|
attr_reader :public_key
|
38
38
|
|
39
|
-
# Constructor of the {
|
39
|
+
# Constructor of the {Klay::Key} class. Creates a new random key-pair
|
40
40
|
# if no `priv` key is provided.
|
41
41
|
#
|
42
42
|
# @param priv [String] binary string of private key data.
|
@@ -82,7 +82,7 @@ module Klay
|
|
82
82
|
Util.bin_to_hex signature.pack "c*"
|
83
83
|
end
|
84
84
|
|
85
|
-
# Prefixes a message with `\
|
85
|
+
# Prefixes a message with `\u0019Klaytn Signed Message:` and signs
|
86
86
|
# it in the common way used by many web3 wallets. Complies with
|
87
87
|
# EIP-191 prefix `0x19` and version byte `0x45` (`E`). See also
|
88
88
|
# {Signature.personal_recover}.
|
@@ -119,7 +119,7 @@ module Klay
|
|
119
119
|
end
|
120
120
|
|
121
121
|
# Exports the private key bytes in a wrapper function to maintain
|
122
|
-
# backward-compatibility with older versions of {
|
122
|
+
# backward-compatibility with older versions of {Klay::Key}.
|
123
123
|
#
|
124
124
|
# @return [String] private key as packed byte-string.
|
125
125
|
def private_bytes
|
@@ -143,7 +143,7 @@ module Klay
|
|
143
143
|
end
|
144
144
|
|
145
145
|
# Exports the uncompressed public key bytes in a wrapper function to
|
146
|
-
# maintain backward-compatibility with older versions of {
|
146
|
+
# maintain backward-compatibility with older versions of {Klay::Key}.
|
147
147
|
#
|
148
148
|
# @return [String] uncompressed public key as packed byte-string.
|
149
149
|
def public_bytes
|
@@ -159,7 +159,7 @@ module Klay
|
|
159
159
|
|
160
160
|
# Exports the checksummed public address.
|
161
161
|
#
|
162
|
-
# @return [
|
162
|
+
# @return [Klay::Address] compressed address as packed hex prefixed string.
|
163
163
|
def address
|
164
164
|
Util.public_key_to_address public_bytes
|
165
165
|
end
|
data/lib/klay/rlp/decoder.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# -*- encoding : ascii-8bit -*-
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
@@ -28,7 +28,7 @@ module Klay
|
|
28
28
|
#
|
29
29
|
# @param rlp [String] an RLP-encoded object.
|
30
30
|
# @return [Object] the decoded and maybe deserialized object.
|
31
|
-
# @raise [
|
31
|
+
# @raise [Klay::Rlp::DecodingError] if the input string does not end after
|
32
32
|
# the root item.
|
33
33
|
def perform(rlp)
|
34
34
|
rlp = Util.hex_to_bin rlp if Util.is_hex? rlp
|
data/lib/klay/rlp/encoder.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# -*- encoding : ascii-8bit -*-
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
@@ -28,9 +28,9 @@ module Klay
|
|
28
28
|
#
|
29
29
|
# @param obj [Object] a Ruby object.
|
30
30
|
# @return [String] the RLP encoded item.
|
31
|
-
# @raise [
|
31
|
+
# @raise [Klay::Rlp::EncodingError] in the rather unlikely case that the item
|
32
32
|
# is too big to encode (will not happen).
|
33
|
-
# @raise [
|
33
|
+
# @raise [Klay::Rlp::SerializationError] if the serialization fails.
|
34
34
|
def perform(obj)
|
35
35
|
item = Sedes.infer(obj).serialize(obj)
|
36
36
|
result = encode_raw item
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# -*- encoding : ascii-8bit -*-
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# -*- encoding : ascii-8bit -*-
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
@@ -33,7 +33,7 @@ module Klay
|
|
33
33
|
#
|
34
34
|
# @param l [Integer] the fixed size of the binary.
|
35
35
|
# @param allow_empty [Boolean] indicator wether empty binaries should be allowed.
|
36
|
-
# @return [
|
36
|
+
# @return [Klay::Rlp::Sedes::Binary] a serializable binary of fixed size.
|
37
37
|
def fixed_length(l, allow_empty: false)
|
38
38
|
new(min_length: l, max_length: l, allow_empty: allow_empty)
|
39
39
|
end
|
data/lib/klay/rlp/sedes/list.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
# -*- encoding : ascii-8bit -*-
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
data/lib/klay/rlp/sedes.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -18,7 +18,7 @@ require "klay/rlp/sedes/big_endian_int"
|
|
18
18
|
require "klay/rlp/sedes/binary"
|
19
19
|
require "klay/rlp/sedes/list"
|
20
20
|
|
21
|
-
# Provides the {
|
21
|
+
# Provides the {Klay} module.
|
22
22
|
module Klay
|
23
23
|
|
24
24
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
@@ -27,13 +27,13 @@ module Klay
|
|
27
27
|
# Provides serializable and deserializable types (SeDes).
|
28
28
|
module Sedes
|
29
29
|
|
30
|
-
# Provides a singleton {
|
30
|
+
# Provides a singleton {Klay::Rlp::Sedes} class to infer objects and types.
|
31
31
|
class << self
|
32
32
|
|
33
33
|
# Tries to find a sedes objects suitable for a given Ruby object.
|
34
34
|
#
|
35
35
|
# The sedes objects considered are `obj`'s class, {big_endian_int} and
|
36
|
-
# {binary}. If `obj` is a list, an {
|
36
|
+
# {binary}. If `obj` is a list, an {Klay::Rlp::Sedes::List} will be
|
37
37
|
# constructed recursively.
|
38
38
|
#
|
39
39
|
# @param obj [Object] the Ruby object for which to find a sedes object.
|
@@ -57,14 +57,14 @@ module Klay
|
|
57
57
|
# A utility to use a big-endian, unsigned integer sedes type with
|
58
58
|
# unspecified length.
|
59
59
|
#
|
60
|
-
# @return [
|
60
|
+
# @return [Klay::Rlp::Sedes::BigEndianInt] a big-endian, unsigned integer sedes.
|
61
61
|
def big_endian_int
|
62
62
|
@big_endian_int ||= BigEndianInt.new
|
63
63
|
end
|
64
64
|
|
65
65
|
# A utility to use a binary sedes type.
|
66
66
|
#
|
67
|
-
# @return [
|
67
|
+
# @return [Klay::Rlp::Sedes::Binary] a binary sedes.
|
68
68
|
def binary
|
69
69
|
@binary ||= Binary.new
|
70
70
|
end
|
data/lib/klay/rlp.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -19,7 +19,7 @@ require "klay/rlp/encoder"
|
|
19
19
|
require "klay/rlp/sedes"
|
20
20
|
require "klay/util"
|
21
21
|
|
22
|
-
# Provides the {
|
22
|
+
# Provides the {Klay} module.
|
23
23
|
module Klay
|
24
24
|
|
25
25
|
# Provides an recursive-length prefix (RLP) encoder and decoder.
|
@@ -44,7 +44,7 @@ module Klay
|
|
44
44
|
# A wrapper to represent already RLP-encoded data.
|
45
45
|
class Data < String; end
|
46
46
|
|
47
|
-
# Performes an {
|
47
|
+
# Performes an {Klay::Rlp::Encoder} on any ruby object.
|
48
48
|
#
|
49
49
|
# @param obj [Object] any ruby object.
|
50
50
|
# @return [String] a packed, RLP-encoded item.
|
@@ -52,7 +52,7 @@ module Klay
|
|
52
52
|
Rlp::Encoder.perform obj
|
53
53
|
end
|
54
54
|
|
55
|
-
# Performes an {
|
55
|
+
# Performes an {Klay::Rlp::Decoder} on any RLP-encoded item.
|
56
56
|
#
|
57
57
|
# @param rlp [String] a packed, RLP-encoded item.
|
58
58
|
# @return [Object] a decoded ruby object.
|
data/lib/klay/signature.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
require "rbsecp256k1"
|
16
16
|
|
17
|
-
# Provides the {
|
17
|
+
# Provides the {Klay} module.
|
18
18
|
module Klay
|
19
19
|
|
20
20
|
# Defines handy tools for verifying and recovering signatures.
|
@@ -38,7 +38,7 @@ module Klay
|
|
38
38
|
# @param message [String] the message string to be prefixed.
|
39
39
|
# @return [String] an EIP-191 prefixed string.
|
40
40
|
def prefix_message(message)
|
41
|
-
"
|
41
|
+
"\u0019Klaytn Signed Message:\n#{message.size}#{message}"
|
42
42
|
end
|
43
43
|
|
44
44
|
# Dissects a signature blob of 65+ bytes into its `r`, `s`, and `v`
|
@@ -50,12 +50,12 @@ module Klay
|
|
50
50
|
def dissect(signature)
|
51
51
|
signature = Util.bin_to_hex signature unless Util.is_hex? signature
|
52
52
|
signature = Util.remove_hex_prefix signature
|
53
|
-
if signature.size
|
53
|
+
if signature.size != 130
|
54
54
|
raise SignatureError, "Unknown signature length #{signature.size}!"
|
55
55
|
end
|
56
|
-
r = signature[0
|
57
|
-
s = signature[64
|
58
|
-
v = signature[128]
|
56
|
+
r = signature[0...64]
|
57
|
+
s = signature[64...128]
|
58
|
+
v = signature[128..]
|
59
59
|
return r, s, v
|
60
60
|
end
|
61
61
|
|
@@ -70,8 +70,7 @@ module Klay
|
|
70
70
|
context = Secp256k1::Context.new
|
71
71
|
r, s, v = dissect signature
|
72
72
|
v = v.to_i(16)
|
73
|
-
|
74
|
-
raise SignatureError, "Invalid signature v byte #{v} for chain ID #{chain_id}!" if v != 130
|
73
|
+
# raise SignatureError, "Invalid signature v byte #{v} for chain ID #{chain_id}!" if v != 130
|
75
74
|
recovery_id = Chain.to_recovery_id v, chain_id
|
76
75
|
signature_rs = Util.hex_to_bin "#{r}#{s}"
|
77
76
|
recoverable_signature = context.recoverable_signature_from_compact signature_rs, recovery_id
|
@@ -110,7 +109,7 @@ module Klay
|
|
110
109
|
#
|
111
110
|
# @param blob [String] that arbitrary data to be verified.
|
112
111
|
# @param signature [String] the hex string containing the signature.
|
113
|
-
# @param public_key [String] either a public key or an
|
112
|
+
# @param public_key [String] either a public key or an Klaytn address.
|
114
113
|
# @param chain_id [Integer] the chain ID used to sign.
|
115
114
|
# @return [Boolean] true if signature matches provided public key.
|
116
115
|
# @raise [SignatureError] if it cannot determine the type of data or public key.
|
@@ -135,7 +134,7 @@ module Klay
|
|
135
134
|
|
136
135
|
if public_key.instance_of? Address
|
137
136
|
|
138
|
-
# recovering using an
|
137
|
+
# recovering using an Klay::Address
|
139
138
|
address = public_key.to_s
|
140
139
|
recovered_address = Util.public_key_to_address(recovered_key).to_s
|
141
140
|
return address == recovered_address
|
data/lib/klay/tx/eip1559.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-2022 The Ruby-
|
1
|
+
# Copyright (c) 2016-2022 The Ruby-Klay Contributors
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,7 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
# Provides the {
|
15
|
+
# Provides the {Klay} module.
|
16
16
|
module Klay
|
17
17
|
|
18
18
|
# Provides the `Tx` module supporting various transaction types.
|
@@ -77,8 +77,8 @@ module Klay
|
|
77
77
|
# @option params [Integer] :priority_fee the max priority fee per gas.
|
78
78
|
# @option params [Integer] :max_gas_fee the max transaction fee per gas.
|
79
79
|
# @option params [Integer] :gas_limit the gas limit.
|
80
|
-
# @option params [
|
81
|
-
# @option params [
|
80
|
+
# @option params [Klay::Address] :from the sender address.
|
81
|
+
# @option params [Klay::Address] :to the reciever address.
|
82
82
|
# @option params [Integer] :value the transaction value.
|
83
83
|
# @option params [String] :data the transaction data payload.
|
84
84
|
# @option params [Array] :access_list an optional access list.
|
@@ -127,11 +127,11 @@ module Klay
|
|
127
127
|
# Overloads the constructor for decoding raw transactions and creating unsigned copies.
|
128
128
|
konstructor :decode, :unsigned_copy
|
129
129
|
|
130
|
-
# Decodes a raw transaction hex into an {
|
130
|
+
# Decodes a raw transaction hex into an {Klay::Tx::Eip1559}
|
131
131
|
# transaction object.
|
132
132
|
#
|
133
133
|
# @param hex [String] the raw transaction hex-string.
|
134
|
-
# @return [
|
134
|
+
# @return [Klay::Tx::Eip1559] transaction payload.
|
135
135
|
# @raise [TransactionTypeError] if transaction type is invalid.
|
136
136
|
# @raise [ParameterError] if transaction is missing fields.
|
137
137
|
# @raise [DecoderError] if transaction decoding fails.
|
@@ -194,8 +194,8 @@ module Klay
|
|
194
194
|
|
195
195
|
# Creates an unsigned copy of a transaction payload.
|
196
196
|
#
|
197
|
-
# @param tx [
|
198
|
-
# @return [
|
197
|
+
# @param tx [Klay::Tx::Eip1559] an EIP-1559 transaction payload.
|
198
|
+
# @return [Klay::Tx::Eip1559] an unsigned EIP-1559 transaction payload.
|
199
199
|
# @raise [TransactionTypeError] if transaction type does not match.
|
200
200
|
def unsigned_copy(tx)
|
201
201
|
|
@@ -225,7 +225,7 @@ module Klay
|
|
225
225
|
|
226
226
|
# Sign the transaction with a given key.
|
227
227
|
#
|
228
|
-
# @param key [
|
228
|
+
# @param key [Klay::Key] the key-pair to use for signing.
|
229
229
|
# @return [String] a transaction hash.
|
230
230
|
# @raise [Signature::SignatureError] if transaction is already signed.
|
231
231
|
# @raise [Signature::SignatureError] if sender address does not match signing key.
|