sigma_rb 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,7 @@ require_relative './util.rb'
3
3
  require 'ffi-compiler/loader'
4
4
 
5
5
  module Sigma
6
+ # UnsignedTransaction builder
6
7
  class TxBuilder
7
8
  extend FFI::Library
8
9
  ffi_lib FFI::Compiler::Loader.find('csigma')
@@ -24,6 +25,14 @@ module Sigma
24
25
 
25
26
  attr_accessor :pointer
26
27
 
28
+ # Create new TxBuilder
29
+ # @param box_selection [BoxSelection] selected input boxes
30
+ # @param output_candidates [ErgoBoxCandidates] output boxes to be "created" in this transaction
31
+ # @param current_height [Integer] chain height that will be used in additionally created boxes (change, miner's fee, etc.)
32
+ # @param fee_amount [BoxValue] miner's fee
33
+ # @param change_address [Address] change (inputs - outputs) will be sent to this address
34
+ # @param min_change_value [BoxValue] minimal value of the change to be sent to `change_address`, value less than that will be given to miners
35
+ # @return [TxBuilder]
27
36
  def self.create(box_selection:, output_candidates:, current_height:, fee_amount:, change_address:, min_change_value:)
28
37
  pointer = FFI::MemoryPointer.new(:pointer)
29
38
  ergo_lib_tx_builder_new(
@@ -38,26 +47,37 @@ module Sigma
38
47
  init(pointer)
39
48
  end
40
49
 
50
+ # Suggested transaction fee (semi-default value used across wallets and dApps as of Oct 2020)
51
+ # @return [BoxValue]
41
52
  def self.suggested_tx_fee
42
53
  pointer = FFI::MemoryPointer.new(:pointer)
43
54
  ergo_lib_tx_builder_suggested_tx_fee(pointer)
44
55
  Sigma::BoxValue.with_raw_pointer(pointer)
45
56
  end
46
57
 
58
+ # Set transaction's data inputs
59
+ # @param data_inputs [DataInputs]
47
60
  def set_data_inputs(data_inputs)
48
61
  ergo_lib_tx_builder_set_data_inputs(self.pointer, data_inputs.pointer)
49
62
  end
50
63
 
64
+ # Set context extension for given input
65
+ # @param box_id [BoxId]
66
+ # @param context_extension [ContextExension]
51
67
  def set_context_extension(box_id, context_extension)
52
68
  ergo_lib_tx_builder_set_context_extension(self.pointer, box_id.pointer, context_extension.pointer)
53
69
  end
54
70
 
71
+ # Get data inputs
72
+ # @return [DataInputs]
55
73
  def get_data_inputs
56
74
  pointer = FFI::MemoryPointer.new(:pointer)
57
75
  ergo_lib_tx_builder_data_inputs(self.pointer, pointer)
58
76
  Sigma::DataInputs.with_raw_pointer(pointer)
59
77
  end
60
78
 
79
+ # Build the UnsignedTransaction
80
+ # @return [UnsignedTransaction]
61
81
  def build
62
82
  pointer = FFI::MemoryPointer.new(:pointer)
63
83
  error = ergo_lib_tx_builder_build(self.pointer, pointer)
@@ -65,34 +85,46 @@ module Sigma
65
85
  Sigma::UnsignedTransaction.with_raw_pointer(pointer)
66
86
  end
67
87
 
88
+ # Get box selection
89
+ # @return [BoxSelection]
68
90
  def get_box_selection
69
91
  pointer = FFI::MemoryPointer.new(:pointer)
70
92
  ergo_lib_tx_builder_box_selection(self.pointer, pointer)
71
93
  Sigma::BoxSelection.with_raw_pointer(pointer)
72
94
  end
73
95
 
96
+ # Get output candidates
97
+ # @return [ErgoBoxCandidates]
74
98
  def get_output_candidates
75
99
  pointer = FFI::MemoryPointer.new(:pointer)
76
100
  ergo_lib_tx_builder_output_candidates(self.pointer, pointer)
77
101
  Sigma::ErgoBoxCandidates.with_raw_pointer(pointer)
78
102
  end
79
103
 
104
+ # Get current height
105
+ # @return [Integer]
80
106
  def get_current_height
81
107
  ergo_lib_tx_builder_current_height(self.pointer)
82
108
  end
83
109
 
110
+ # Get fee amount
111
+ # @return [BoxValue]
84
112
  def get_fee_amount
85
113
  pointer = FFI::MemoryPointer.new(:pointer)
86
114
  ergo_lib_tx_builder_fee_amount(self.pointer, pointer)
87
115
  Sigma::BoxValue.with_raw_pointer(pointer)
88
116
  end
89
117
 
118
+ # Get change address
119
+ # @return [Address]
90
120
  def get_change_address
91
121
  pointer = FFI::MemoryPointer.new(:pointer)
92
122
  ergo_lib_tx_builder_change_address(self.pointer, pointer)
93
123
  Sigma::Address.with_raw_pointer(pointer)
94
124
  end
95
125
 
126
+ # Get min change value
127
+ # @return [BoxValue]
96
128
  def get_min_change_value
97
129
  pointer = FFI::MemoryPointer.new(:pointer)
98
130
  ergo_lib_tx_builder_min_change_value(self.pointer, pointer)
data/lib/sigma/wallet.rb CHANGED
@@ -19,6 +19,11 @@ module Sigma
19
19
  attach_function :ergo_lib_wallet_add_secret, [:pointer, :pointer], :error_pointer
20
20
  attr_accessor :pointer
21
21
 
22
+ # Create Wallet instance loading secret key from mnemonic. Throws error if a DlogSecretKey cannot be
23
+ # parsed from the provided phrase
24
+ # @param mnemonic_phrase [String]
25
+ # @param mnemonic_pass [String]
26
+ # @return [Wallet]
22
27
  def self.create_from_mnemonic(mnemonic_phrase, mnemonic_pass)
23
28
  pointer = FFI::MemoryPointer.new(:pointer)
24
29
  error = ergo_lib_wallet_from_mnemonic(mnemonic_phrase, mnemonic_pass, pointer)
@@ -26,17 +31,28 @@ module Sigma
26
31
  init(pointer)
27
32
  end
28
33
 
34
+ # Create Wallet from secrets
35
+ # @param secrets [SecretKeys]
36
+ # @return [Wallet]
29
37
  def self.create_from_secrets(secrets)
30
38
  pointer = FFI::MemoryPointer.new(:pointer)
31
39
  ergo_lib_wallet_from_secrets(secrets.pointer, pointer)
32
40
  init(pointer)
33
41
  end
34
42
 
43
+ # Add a secret to the wallet's prover
44
+ # @param secret [SecretKey]
35
45
  def add_secret(secret)
36
46
  error = ergo_lib_wallet_add_secret(self.pointer, secret.pointer)
37
47
  Util.check_error!(error)
38
48
  end
39
49
 
50
+ # Sign a transaction
51
+ # @param state_context: [ErgoStateContext]
52
+ # @param unsigned_tx: [UnsignedTransaction]
53
+ # @param boxes_to_spend: [ErgoBoxes]
54
+ # @param data_boxes: [ErgoBoxes]
55
+ # @return [Transaction]
40
56
  def sign_transaction(state_context:, unsigned_tx:, boxes_to_spend:, data_boxes:)
41
57
  pointer = FFI::MemoryPointer.new(:pointer)
42
58
  error = ergo_lib_wallet_sign_transaction(self.pointer, state_context.pointer, unsigned_tx.pointer, boxes_to_spend.pointer, data_boxes.pointer, pointer)
@@ -44,6 +60,13 @@ module Sigma
44
60
  Sigma::Transaction.with_raw_pointer(pointer)
45
61
  end
46
62
 
63
+ # Sign a multi-signature transaction
64
+ # @param state_context: [ErgoStateContext]
65
+ # @param unsigned_tx: [UnsignedTransaction]
66
+ # @param boxes_to_spend: [ErgoBoxes]
67
+ # @param data_boxes: [ErgoBoxes]
68
+ # @param tx_hints: [TransactionHintsBag]
69
+ # @return [Transaction]
47
70
  def sign_transaction_multi(state_context:, unsigned_tx:, boxes_to_spend:, data_boxes:, tx_hints:)
48
71
  pointer = FFI::MemoryPointer.new(:pointer)
49
72
  error = ergo_lib_wallet_sign_transaction_multi(self.pointer, state_context.pointer, unsigned_tx.pointer, boxes_to_spend.pointer, data_boxes.pointer, tx_hints.pointer, pointer)
@@ -51,6 +74,9 @@ module Sigma
51
74
  Sigma::Transaction.with_raw_pointer(pointer)
52
75
  end
53
76
 
77
+ # Signs a reduced transaction (generating proofs for inputs)
78
+ # @param reduced_tx [ReducedTransaction]
79
+ # @return [Transaction]
54
80
  def sign_reduced_transaction(reduced_tx)
55
81
  pointer = FFI::MemoryPointer.new(:pointer)
56
82
  error = ergo_lib_wallet_sign_reduced_transaction(self.pointer, reduced_tx.pointer, pointer)
@@ -58,6 +84,10 @@ module Sigma
58
84
  Sigma::Transaction.with_raw_pointer(pointer)
59
85
  end
60
86
 
87
+ # Signs a multi signature reduced transaction
88
+ # @param reduced_tx [ReducedTransaction]
89
+ # @param tx_hints: [TransactionHintsBag]
90
+ # @return [Transaction]
61
91
  def sign_reduced_transaction_multi(reduced_tx:, tx_hints:)
62
92
  pointer = FFI::MemoryPointer.new(:pointer)
63
93
  error = ergo_lib_wallet_sign_reduced_transaction_multi(self.pointer, reduced_tx.pointer, tx_hints.pointer, pointer)
@@ -65,6 +95,12 @@ module Sigma
65
95
  Sigma::Transaction.with_raw_pointer(pointer)
66
96
  end
67
97
 
98
+ # Generate Commitments for unsigned tx
99
+ # @param state_context: [ErgoStateContext]
100
+ # @param unsigned_tx: [UnsignedTransaction]
101
+ # @param boxes_to_spend: [ErgoBoxes]
102
+ # @param data_boxes: [ErgoBoxes]
103
+ # @return [TransactionHintsBag]
68
104
  def generate_commitments(state_context:, unsigned_tx:, boxes_to_spend:, data_boxes:)
69
105
  pointer = FFI::MemoryPointer.new(:pointer)
70
106
  error = ergo_lib_wallet_generate_commitments(self.pointer, state_context.pointer, unsigned_tx.pointer, boxes_to_spend.pointer, data_boxes.pointer, pointer)
@@ -72,6 +108,9 @@ module Sigma
72
108
  Sigma::TransactionHintsBag.with_raw_pointer(pointer)
73
109
  end
74
110
 
111
+ # Generate Commitments for reduced transaction
112
+ # @param reduced_tx [ReducedTransaction]
113
+ # @return [TransactionHintsBag]
75
114
  def generate_commitments_for_reduced_transaction(reduced_tx)
76
115
  pointer = FFI::MemoryPointer.new(:pointer)
77
116
  error = ergo_lib_wallet_generate_commitments_for_reduced_transaction(self.pointer, reduced_tx.pointer, pointer)
data/sigma.gemspec CHANGED
@@ -1,18 +1,19 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'sigma_rb'
3
- s.version = '0.1.3'
3
+ s.version = '0.1.4'
4
4
  s.summary = "Ruby bindings for Ergo types, abstractions, and interfaces provided by Sigma-Rust."
5
5
  s.description = "Ruby bindings for the Ergo-Lib crate of Sigma-Rust. Specifically for chain types and abstractions, json serialization, box selection for tx inputs, tx creation, and signing."
6
6
  s.authors = ["Dark Lord of Programming"]
7
7
  s.email = 'thedlop@sent.com'
8
8
  s.homepage = 'https://github.com/thedlop/sigma_rb'
9
9
  s.license = 'MIT'
10
- s.files = Dir.glob("{lib}/**/*")
10
+ s.files = Dir.glob("{lib}/**/*")
11
11
  s.files += %w(sigma.gemspec README.md LICENSE ext/Rakefile ext/csigma.c)
12
12
  s.add_dependency 'ffi-compiler', '1.0.1'
13
13
  s.add_dependency 'rake', '~> 13.0'
14
14
  s.add_development_dependency 'ffi', '1.15.5'
15
15
  s.add_development_dependency 'test-unit', '~> 3.5'
16
+ s.add_development_dependency 'yard', '~> 0.6'
16
17
  s.extensions << "ext/Rakefile"
17
18
  s.test_files = Dir["tests/**/*.rb"]
18
19
  s.require_paths = ["lib"]
@@ -11,9 +11,11 @@ class Sigma::ErgoTree::Test < Test::Unit::TestCase
11
11
  base_16 = "100204a00b08cd021dde34603426402615658f1d970cfa7c7bd92ac81a8b16eeebff264d59ce4604ea02d192a39a8cc7a70173007301"
12
12
  tree = Sigma::ErgoTree.from_base16_encoded_string(base_16)
13
13
  assert_equal(base_16, tree.to_base16_encoded_string)
14
- assert_nothing_raised do
14
+ bytes = assert_nothing_raised do
15
15
  tree.to_bytes
16
16
  end
17
+ tree_from_bytes = Sigma::ErgoTree.from_bytes(bytes)
18
+ assert_equal(tree_from_bytes, tree)
17
19
  assert_nothing_raised do
18
20
  tree.to_template_bytes
19
21
  end
@@ -1,7 +1,7 @@
1
-
2
1
  require 'rubygems'
3
2
  require 'bundler/setup'
4
3
  require 'test/unit'
4
+ require 'json'
5
5
 
6
6
  require_relative '../../lib/sigma.rb'
7
7
  require_relative '../test_utils.rb'
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  require 'test/unit'
4
+ require 'json'
4
5
 
5
6
  require_relative '../../lib/sigma.rb'
6
7
  require_relative '../test_utils.rb'
data/tests/test_seeds.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require_relative '../lib/sigma'
2
+ require 'json'
2
3
 
3
4
  module TestSeeds
4
5
  def self.block_header_json
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sigma_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dark Lord of Programming
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-20 00:00:00.000000000 Z
11
+ date: 2022-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi-compiler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.6'
69
83
  description: Ruby bindings for the Ergo-Lib crate of Sigma-Rust. Specifically for
70
84
  chain types and abstractions, json serialization, box selection for tx inputs, tx
71
85
  creation, and signing.