near 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4ab3d2b8796c8b9d6db6d842a843882a02b1497070454e67dda41a2105dbe7aa
4
+ data.tar.gz: 66de38abb9b8bd7162116f110ae2a3f81412f7e580bb2e479db5133d2504f725
5
+ SHA512:
6
+ metadata.gz: 8cead3d3f26398a34925d6ba326c981f19be8e4324348f7dd8879a1c291ad11bd80080c11023477e3f4ee5bbfcf5bddfc421e85bea05f8e42acfd672e28bea0f
7
+ data.tar.gz: f11b1a7a3c795865375feb3c873e9158009b6508a06150d91b3dff126b074920b2c91e658c6bc121e91098f64c198e47aaff0a7ee1348adb1e39364212eb2db5
data/AUTHORS ADDED
@@ -0,0 +1 @@
1
+ * Arto Bendiken <arto@bendiken.net>
data/CHANGES.md ADDED
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## 0.1.0 - 2025-01-19
9
+
10
+ ## 0.0.0 - 2025-01-11
data/README.md ADDED
@@ -0,0 +1,232 @@
1
+ # NEAR.rb: NEAR for Ruby
2
+
3
+ [![License](https://img.shields.io/badge/license-Public%20Domain-blue.svg)](https://unlicense.org)
4
+ [![Compatibility](https://img.shields.io/badge/ruby-3.0%2B-blue)](https://rubygems.org/gems/near)
5
+ [![Package](https://img.shields.io/gem/v/near)](https://rubygems.org/gems/near)
6
+ [![Documentation](https://img.shields.io/badge/rubydoc-latest-blue)](https://rubydoc.info/gems/near)
7
+
8
+ **NEAR.rb** is a [Ruby] client library for the [NEAR Protocol].
9
+ It wraps the [NEAR command-line interface] (CLI) into a Ruby interface.
10
+
11
+ ## ✨ Features
12
+
13
+ - Wraps the complete CLI features in an idiomatic Ruby interface.
14
+ - Provides comprehensive account management operations.
15
+ - Supports token operations for NEAR and other assets.
16
+ - Supports smart contract deployment and interaction.
17
+ - Handles transaction construction, signing, and monitoring.
18
+ - Integrates with hardware wallets and secure key storage.
19
+ - Implements type-safe balance operations and input validation.
20
+ - Supports both the [mainnet] and [testnet] environments.
21
+ - Offers cross-platform support with zero library dependencies.
22
+ - 100% free and unencumbered public domain software.
23
+
24
+ ## 🛠️ Prerequisites
25
+
26
+ - [NEAR CLI] 0.17+
27
+ - [Ruby] 3.0+
28
+
29
+ ## ⬇️ Installation
30
+
31
+ ### Installation via RubyGems
32
+
33
+ ```bash
34
+ gem install near
35
+ ```
36
+
37
+ ## 👉 Examples
38
+
39
+ ### Importing the library
40
+
41
+ ```ruby
42
+ require 'near'
43
+
44
+ # Use the NEAR testnet (the default):
45
+ testnet = NEAR::CLI.new(network: 'testnet')
46
+
47
+ # Use the NEAR mainnet (to test in prod):
48
+ # mainnet = NEAR::CLI.new(network: 'mainnet')
49
+ ```
50
+
51
+ ### Viewing account details
52
+
53
+ ```ruby
54
+ # View an account summary:
55
+ summary = testnet.view_account_summary('arto.testnet')
56
+ puts summary
57
+
58
+ # View an account at a specific block height:
59
+ summary = testnet.view_account_summary('arto.testnet',
60
+ block: 185_304_186
61
+ )
62
+
63
+ # View an account at a specific block hash:
64
+ summary = testnet.view_account_summary('arto.testnet',
65
+ block: '13UmYhdcdst88aC19QhjYjNMF1zRmaAyY6iqwc5q45bx'
66
+ )
67
+
68
+ # List access keys in an account:
69
+ keys = testnet.list_keys('arto.testnet')
70
+ puts keys
71
+ ```
72
+
73
+ ### Importing accounts
74
+
75
+ ```ruby
76
+ # Import an account using a seed phrase:
77
+ result = testnet.import_account_with_seed_phrase(
78
+ 'rapid cover napkin accuse junk drill sick tooth poem patch evil fan',
79
+ hd_path: "m/44'/397'/0'"
80
+ )
81
+
82
+ # Import an account using a private key:
83
+ result = testnet.import_account_with_private_key(
84
+ 'ed25519:5YhAaEe3G4VtiBavJMvpzPPmknfsTauzVjwK1ZjPVw2MFM6zFyUv4tSiSfCbCn78mEnMifE6iX5qbhFsWEwErcC2'
85
+ )
86
+ ```
87
+
88
+ ### Creating accounts
89
+
90
+ ```ruby
91
+ # Create an account funded from a faucet (testnet only):
92
+ result = testnet.create_account_with_faucet(
93
+ 'mynewaccount.testnet',
94
+ 'ed25519:HVPgAsZkZ7cwLZDqK313XJsDyqAvgBxrATcD7VacA8KE'
95
+ )
96
+
97
+ # Create an account funded by another account:
98
+ result = testnet.create_account_with_funding(
99
+ 'sub.example.testnet', # new account
100
+ 'example.testnet', # funding account
101
+ 'ed25519:6jm8hWUgwoEeGmpdEyk9zrCqtXM8kHhvg8M236ZaGusS', # public key
102
+ '1 NEAR' # initial deposit
103
+ )
104
+
105
+ # Create a new implicit account:
106
+ result = testnet.create_implicit_account('/path/to/credentials/folder')
107
+ ```
108
+
109
+ ### Deleting accounts
110
+
111
+ ```ruby
112
+ # Delete an existing account:
113
+ result = testnet.delete_account(
114
+ 'todelete.testnet', # account to delete
115
+ 'beneficiary.testnet' # account receiving remaining balance
116
+ )
117
+ ```
118
+
119
+ ### Managing access keys
120
+
121
+ ```ruby
122
+ # Add a full-access key to an account:
123
+ result = testnet.add_full_access_key(
124
+ 'myaccount.testnet',
125
+ 'ed25519:75a5ZgVZ9DFTxs4THtFxPtLj7AY3YzpxtapTQBdcMXx3'
126
+ )
127
+
128
+ # Add a function-call key to an account:
129
+ result = testnet.add_function_call_key(
130
+ 'myaccount.testnet',
131
+ 'ed25519:27R66L6yevyHbsk4fESZDC8QUQBwCdx6vvkk1uQmG7NY',
132
+ 'app.example.testnet', # contract that can be called
133
+ ['set_status', 'get_status'], # allowed methods
134
+ '1 NEAR' # allowance
135
+ )
136
+
137
+ # Delete an access key from an account:
138
+ result = testnet.delete_key(
139
+ 'myaccount.testnet',
140
+ 'ed25519:75a5ZgVZ9DFTxs4THtFxPtLj7AY3YzpxtapTQBdcMXx3'
141
+ )
142
+ ```
143
+
144
+ ### Managing tokens
145
+
146
+ ```ruby
147
+ # Send NEAR tokens from one account to another:
148
+ result = testnet.send_near(
149
+ 'mysender.testnet',
150
+ 'myreceiver.testnet',
151
+ NEAR::Balance.new('0.1')
152
+ )
153
+ ```
154
+
155
+ ### Calling read-only contract methods
156
+
157
+ ```ruby
158
+ # Call a view method:
159
+ result = testnet.view_call(
160
+ 'myapp.testnet', # contract account
161
+ 'get_status', # method name
162
+ { account_id: 'user.testnet' } # arguments
163
+ )
164
+
165
+ # Call a view method at a specific block height:
166
+ result = testnet.view_call(
167
+ 'myapp.testnet',
168
+ 'get_status',
169
+ { account_id: 'user.testnet' },
170
+ block: 12345678
171
+ )
172
+ ```
173
+
174
+ ### Calling mutative contract methods
175
+
176
+ ```ruby
177
+ # Call a mutative method as a transaction:
178
+ result = testnet.call_function(
179
+ 'myapp.testnet', # contract account
180
+ 'set_status', # method name
181
+ { status: 'Hello NEAR!' }, # arguments
182
+ signer_id: 'user.testnet', # account that signs tx
183
+ deposit: '1 NEAR', # attached deposit
184
+ gas: '30 TGas' # attached gas
185
+ )
186
+ ```
187
+
188
+ ### Deploying a smart contract
189
+
190
+ ```ruby
191
+ # Deploy a new contract:
192
+ result = testnet.deploy_contract(
193
+ 'myapp.testnet', # contract account
194
+ '/tmp/contract.wasm', # WASM file path
195
+ signer_id: 'deployer.testnet',
196
+ # Optional initialization:
197
+ init_method: 'new',
198
+ init_args: { owner_id: 'deployer.testnet' },
199
+ init_deposit: '0 NEAR',
200
+ init_gas: '30 TGas'
201
+ )
202
+
203
+ # Download a contract WebAssembly blob:
204
+ result = testnet.download_wasm(
205
+ 'myapp.testnet',
206
+ '/tmp/contract.wasm'
207
+ )
208
+ ```
209
+
210
+ ## 📚 Reference
211
+
212
+ https://rubydoc.info/gems/near
213
+
214
+ ## 👨‍💻 Development
215
+
216
+ ```bash
217
+ git clone https://github.com/dryruby/near.rb.git
218
+ ```
219
+
220
+ - - -
221
+
222
+ [![Share on Twitter](https://img.shields.io/badge/share%20on-twitter-03A9F4?logo=twitter)](https://x.com/share?url=https://github.com/dryruby/near.rb&text=NEAR.rb)
223
+ [![Share on Reddit](https://img.shields.io/badge/share%20on-reddit-red?logo=reddit)](https://reddit.com/submit?url=https://github.com/dryruby/near.rb&title=NEAR.rb)
224
+ [![Share on Hacker News](https://img.shields.io/badge/share%20on-hacker%20news-orange?logo=ycombinator)](https://news.ycombinator.com/submitlink?u=https://github.com/dryruby/near.rb&t=NEAR.rb)
225
+ [![Share on Facebook](https://img.shields.io/badge/share%20on-facebook-1976D2?logo=facebook)](https://www.facebook.com/sharer/sharer.php?u=https://github.com/dryruby/near.rb)
226
+
227
+ [NEAR CLI]: https://github.com/near/near-cli-rs
228
+ [NEAR Protocol]: https://near.org
229
+ [NEAR command-line interface]: https://docs.near.org/tools/near-cli
230
+ [Ruby]: https://ruby-lang.org
231
+ [mainnet]: https://docs.near.org/concepts/basics/networks#mainnet
232
+ [testnet]: https://docs.near.org/concepts/basics/networks#testnet
data/UNLICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <https://unlicense.org/>
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,31 @@
1
+ # This is free and unencumbered software released into the public domain.
2
+
3
+ ##
4
+ # Represents a NEAR account.
5
+ #
6
+ # @see https://nomicon.io/DataStructures/Account
7
+ class NEAR::Account
8
+ ##
9
+ # @param [String, #to_s] id
10
+ def initialize(id)
11
+ @id = id.to_s
12
+ end
13
+
14
+ ##
15
+ # The account name.
16
+ #
17
+ # @return [String]
18
+ attr_reader :id
19
+
20
+ ##
21
+ # The balance as a Ⓝ-prefixed string.
22
+ #
23
+ # @return [String]
24
+ def inspect
25
+ "Ⓝ#{@id}"
26
+ end
27
+
28
+ ##
29
+ # @return [String]
30
+ def to_s; @id; end
31
+ end # NEAR::Block
@@ -0,0 +1,57 @@
1
+ # This is free and unencumbered software released into the public domain.
2
+
3
+ require 'bigdecimal'
4
+
5
+ ##
6
+ # Represents a NEAR balance.
7
+ class NEAR::Balance
8
+ def self.from_near(s)
9
+ self.new(s)
10
+ end
11
+
12
+ ##
13
+ # @param [Numeric] quantity
14
+ # @raise [ArgumentError] if quantity is not a valid number
15
+ def initialize(quantity)
16
+ @quantity = case quantity
17
+ when BigDecimal then quantity
18
+ when Rational then quantity
19
+ when Integer then quantity
20
+ when Float then quantity
21
+ when String then BigDecimal(quantity)
22
+ else raise ArgumentError, "invalid quantity: #{quantity.inspect}"
23
+ end
24
+ end
25
+
26
+ ##
27
+ # The balance as a Ⓝ-prefixed string.
28
+ #
29
+ # @return [String]
30
+ def inspect
31
+ "Ⓝ#{@quantity.to_f}"
32
+ end
33
+
34
+ ##
35
+ # The balance as a string.
36
+ #
37
+ # @return [String]
38
+ def to_s; @quantity.to_s; end
39
+
40
+ ##
41
+ # The balance as a rational number.
42
+ #
43
+ # @return [Rational]
44
+ def to_r; @quantity.to_r; end
45
+
46
+ ##
47
+ # The balance as an integer.
48
+ #
49
+ # @return [Integer]
50
+ def to_i; @quantity.to_i; end
51
+
52
+ ##
53
+ # The balance as a floating-point number.
54
+ #
55
+ # @return [Float]
56
+ def to_f; @quantity.to_f; end
57
+ end # NEAR::Balance
data/lib/near/block.rb ADDED
@@ -0,0 +1,59 @@
1
+ # This is free and unencumbered software released into the public domain.
2
+
3
+ ##
4
+ # Represents a NEAR block.
5
+ class NEAR::Block
6
+ ##
7
+ # @return [NEAR::Block]
8
+ def self.now
9
+ self.new
10
+ end
11
+
12
+ ##
13
+ # @param [Integer, #to_i] height
14
+ # @return [NEAR::Block]
15
+ def self.at_height(height)
16
+ self.new(height: height)
17
+ end
18
+
19
+ ##
20
+ # @param [String, #to_s] hash
21
+ # @return [NEAR::Block]
22
+ def self.at_hash(hash)
23
+ self.new(hash: hash)
24
+ end
25
+
26
+ ##
27
+ # @param [Integer, #to_i] height
28
+ # @param [String, #to_s] hash
29
+ def initialize(height: nil, hash: nil)
30
+ @height = height.to_i if height
31
+ @hash = hash.to_s if hash
32
+ end
33
+
34
+ ##
35
+ # The height of the block.
36
+ #
37
+ # @return [Integer]
38
+ attr_reader :height
39
+
40
+ ##
41
+ # The hash of the block.
42
+ #
43
+ # @return [String]
44
+ attr_reader :hash
45
+
46
+ ##
47
+ # @return [Array<String>]
48
+ def to_cli_args
49
+ return ['at-block-height', @height] if @height
50
+ return ['at-block-hash', @hash] if @hash
51
+ ['now']
52
+ end
53
+
54
+ ##
55
+ # @return [String]
56
+ def to_s
57
+ (@height || @hash || :now).to_s
58
+ end
59
+ end # NEAR::Block
@@ -0,0 +1,264 @@
1
+ # This is free and unencumbered software released into the public domain.
2
+
3
+ ##
4
+ # @see https://github.com/near/near-cli-rs/blob/main/docs/GUIDE.en.md#account---Manage-accounts
5
+ module NEAR::CLI::Account
6
+ ##
7
+ # Views properties for an account.
8
+ #
9
+ # @param [String] account_id
10
+ # @param [Block, Integer, String, Symbol] block
11
+ # @return [String]
12
+ def view_account_summary(account_id, block: :now)
13
+ stdout, _ = execute(
14
+ 'account',
15
+ 'view-account-summary', account_id,
16
+ 'network-config', @network,
17
+ *block_args(block)
18
+ )
19
+ stdout
20
+ end
21
+
22
+ ##
23
+ # Lists access keys for an account.
24
+ #
25
+ # @param [String] account_id
26
+ # @param [Block, Integer, String, Symbol] block
27
+ # @return [String]
28
+ def list_keys(account_id, block: :now)
29
+ stdout, _ = execute(
30
+ 'account',
31
+ 'list-keys', account_id,
32
+ 'network-config', @network,
33
+ *block_args(block)
34
+ )
35
+ stdout
36
+ end
37
+
38
+ ##
39
+ # Imports an existing account using a seed phrase.
40
+ #
41
+ # @param [String] seed_phrase
42
+ # @param [String] hd_path
43
+ # @return [String]
44
+ def import_account_with_seed_phrase(seed_phrase, hd_path: "m/44'/397'/0'")
45
+ _, stderr = execute(
46
+ 'account',
47
+ 'import-account',
48
+ 'using-seed-phrase', seed_phrase,
49
+ '--seed-phrase-hd-path', hd_path,
50
+ 'network-config', @network
51
+ )
52
+ stderr
53
+ end
54
+
55
+ ##
56
+ # Imports an existing account using a private key.
57
+ #
58
+ # @param [String] private_key
59
+ # @return [String]
60
+ def import_account_with_private_key(private_key)
61
+ _, stderr = execute(
62
+ 'account',
63
+ 'import-account',
64
+ 'using-private-key', private_key,
65
+ 'network-config', @network
66
+ )
67
+ stderr
68
+ end
69
+
70
+ ##
71
+ # Creates a new account sponsored by the faucet service.
72
+ #
73
+ # @param [String] new_account_id
74
+ # @param [String] public_key
75
+ # @return [String]
76
+ def create_account_with_faucet(new_account_id, public_key)
77
+ stdout, stderr = execute(
78
+ 'account',
79
+ 'create-account',
80
+ 'sponsor-by-faucet-service', new_account_id,
81
+ 'use-manually-provided-public-key', public_key,
82
+ 'network-config', @network,
83
+ 'create'
84
+ )
85
+ stderr
86
+ end
87
+
88
+ ##
89
+ # Creates a new account funded by another account.
90
+ #
91
+ # @param [String] new_account_id
92
+ # @param [String] funding_account_id
93
+ # @param [String] public_key
94
+ # @param [String] deposit
95
+ # @return [String]
96
+ def create_account_with_funding(new_account_id, funding_account_id, public_key, deposit)
97
+ stdout, stderr = execute(
98
+ 'account',
99
+ 'create-account',
100
+ 'fund-myself', new_account_id, deposit,
101
+ 'use-manually-provided-public-key', public_key,
102
+ 'sign-as', funding_account_id,
103
+ 'network-config', @network,
104
+ 'sign-with-keychain',
105
+ 'send'
106
+ )
107
+ stderr
108
+ end
109
+
110
+ ##
111
+ # Creates an implicit account.
112
+ #
113
+ # @param [String] save_path
114
+ # @return [String]
115
+ def create_implicit_account(save_path)
116
+ stdout, stderr = execute(
117
+ 'account',
118
+ 'create-account',
119
+ 'fund-later',
120
+ 'use-auto-generation',
121
+ 'save-to-folder', save_path
122
+ )
123
+ stderr
124
+ end
125
+
126
+ ##
127
+ # Deletes an account and transfers remaining balance to beneficiary.
128
+ #
129
+ # @param [String] account_id
130
+ # @param [String] beneficiary_id
131
+ # @return [String]
132
+ def delete_account(account_id, beneficiary_id)
133
+ stdout, stderr = execute(
134
+ 'account',
135
+ 'delete-account', account_id,
136
+ 'beneficiary', beneficiary_id,
137
+ 'network-config', @network,
138
+ 'sign-with-keychain',
139
+ 'send'
140
+ )
141
+ stderr
142
+ end
143
+
144
+ ##
145
+ # Adds a full access key to an account.
146
+ #
147
+ # @param [String] account_id
148
+ # @param [String] public_key
149
+ # @return [String]
150
+ def add_full_access_key(account_id, public_key)
151
+ stdout, stderr = execute(
152
+ 'account',
153
+ 'add-key', account_id,
154
+ 'grant-full-access',
155
+ 'use-manually-provided-public-key', public_key,
156
+ 'network-config', @network,
157
+ 'sign-with-keychain',
158
+ 'send'
159
+ )
160
+ stderr
161
+ end
162
+
163
+ ##
164
+ # Adds a function call access key to an account.
165
+ #
166
+ # @param [String] account_id
167
+ # @param [String] public_key
168
+ # @param [String] receiver_id
169
+ # @param [Array<String>] method_names
170
+ # @param [String] allowance
171
+ # @return [String]
172
+ def add_function_call_key(account_id, public_key, receiver_id, method_names, allowance)
173
+ stdout, stderr = execute(
174
+ 'account',
175
+ 'add-key', account_id,
176
+ 'grant-function-call-access',
177
+ '--allowance', allowance,
178
+ '--receiver-account-id', receiver_id,
179
+ '--method-names', method_names.join(', '),
180
+ 'use-manually-provided-public-key', public_key,
181
+ 'network-config', @network,
182
+ 'sign-with-keychain',
183
+ 'send'
184
+ )
185
+ stderr
186
+ end
187
+
188
+ ##
189
+ # Deletes an access key from an account.
190
+ #
191
+ # @param [String] account_id
192
+ # @param [String] public_key
193
+ # @return [String]
194
+ def delete_key(account_id, public_key)
195
+ stdout, stderr = execute(
196
+ 'account',
197
+ 'delete-key', account_id,
198
+ public_key,
199
+ 'network-config', @network,
200
+ 'sign-with-keychain',
201
+ 'send'
202
+ )
203
+ stderr
204
+ end
205
+
206
+ ##
207
+ # Views storage balance for an account.
208
+ #
209
+ # @param [String] contract_id
210
+ # @param [String] account_id
211
+ # @param [Block, Integer, String, Symbol] block
212
+ # @return [String]
213
+ def view_storage_balance(contract_id, account_id, block: :now)
214
+ stdout, _ = execute(
215
+ 'account',
216
+ 'manage-storage-deposit', contract_id,
217
+ 'view-balance', account_id,
218
+ 'network-config', @network,
219
+ *block_args(block)
220
+ )
221
+ stdout
222
+ end
223
+
224
+ ##
225
+ # Makes a storage deposit for an account.
226
+ #
227
+ # @param [String] contract_id
228
+ # @param [String] account_id
229
+ # @param [String] deposit
230
+ # @param [String] sign_as
231
+ # @return [String]
232
+ def make_storage_deposit(contract_id, account_id, deposit, sign_as)
233
+ stdout, stderr = execute(
234
+ 'account',
235
+ 'manage-storage-deposit', contract_id,
236
+ 'deposit', account_id, deposit,
237
+ 'sign-as', sign_as,
238
+ 'network-config', @network,
239
+ 'sign-with-keychain',
240
+ 'send'
241
+ )
242
+ stderr
243
+ end
244
+
245
+ ##
246
+ # Withdraws storage deposit for an account.
247
+ #
248
+ # @param [String] contract_id
249
+ # @param [String] amount
250
+ # @param [String] account_id
251
+ # @return [String]
252
+ def withdraw_storage_deposit(contract_id, amount, account_id)
253
+ stdout, stderr = execute(
254
+ 'account',
255
+ 'manage-storage-deposit', contract_id,
256
+ 'withdraw', amount,
257
+ 'sign-as', account_id,
258
+ 'network-config', @network,
259
+ 'sign-with-keychain',
260
+ 'send'
261
+ )
262
+ stderr
263
+ end
264
+ end # NEAR::CLI::Account
@@ -0,0 +1,7 @@
1
+ # This is free and unencumbered software released into the public domain.
2
+
3
+ ##
4
+ # @see https://github.com/near/near-cli-rs/blob/main/docs/GUIDE.en.md#config---Manage-connections-in-a-configuration-file
5
+ module NEAR::CLI::Config
6
+ # TODO: implement the `NEAR::CLI::Config` module.
7
+ end # NEAR::CLI::Config