Class: Coinbase::SmartContract
- Inherits:
-
Object
- Object
- Coinbase::SmartContract
- Defined in:
- lib/coinbase/smart_contract.rb
Overview
A representation of a SmartContract on the blockchain.
Class Method Summary collapse
- .create_multi_token_contract(address_id:, wallet_id:, uri:) ⇒ Object
-
.create_nft_contract(address_id:, wallet_id:, name:, symbol:, base_uri:) ⇒ SmartContract
Creates a new ERC721 token contract, that can subsequently be deployed to the blockchain.
-
.create_token_contract(address_id:, wallet_id:, name:, symbol:, total_supply:) ⇒ SmartContract
Creates a new ERC20 token contract, that can subsequently be deployed to the blockchain.
-
.list_events(network_id:, protocol_name:, contract_address:, contract_name:, event_name:, from_block_height:, to_block_height:) ⇒ Enumerable<Coinbase::ContractEvent>
Returns a list of ContractEvents for the provided network, contract, and event details.
Instance Method Summary collapse
-
#abi ⇒ Array<Hash>
Returns the ABI of the Smart Contract.
-
#contract_address ⇒ String
Returns the contract address of the SmartContract.
-
#deploy! ⇒ SmartContract
Deploys the signed SmartContract to the blockchain.
-
#deployer_address ⇒ String
Returns the address of the deployer of the SmartContract.
-
#id ⇒ String
Returns the SmartContract ID.
-
#initialize(model) ⇒ SmartContract
constructor
Returns a new SmartContract object.
-
#inspect ⇒ String
Same as to_s.
-
#network ⇒ Coinbase::Network
Returns the Network of the SmartContract.
-
#options ⇒ Coinbase::Client::SmartContractOptions
Returns the options of the SmartContract.
-
#reload ⇒ SmartContract
Reloads the Smart Contract model with the latest version from the server side.
-
#sign(key) ⇒ SmartContract
Signs the SmartContract deployment transaction with the given key.
-
#status ⇒ String
Returns the status of the SmartContract.
-
#to_s ⇒ String
Returns a string representation of the SmartContract.
-
#transaction ⇒ Coinbase::Transaction
Returns the transaction.
-
#type ⇒ Coinbase::Client::SmartContractType
Returns the type of the SmartContract.
-
#wait!(interval_seconds = 0.2, timeout_seconds = 20) ⇒ SmartContract
Waits until the Smart Contract deployment is signed or failed by polling the server at the given interval.
-
#wallet_id ⇒ String
Returns the ID of the wallet that deployed the SmartContract.
Constructor Details
#initialize(model) ⇒ SmartContract
Returns a new SmartContract object.
164 165 166 167 168 |
# File 'lib/coinbase/smart_contract.rb', line 164 def initialize(model) raise unless model.is_a?(Coinbase::Client::SmartContract) @model = model end |
Class Method Details
.create_multi_token_contract(address_id:, wallet_id:, uri:) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/coinbase/smart_contract.rb', line 108 def self.create_multi_token_contract( address_id:, wallet_id:, uri: ) contract = Coinbase.call_api do smart_contracts_api.create_smart_contract( wallet_id, address_id, { type: Coinbase::Client::SmartContractType::ERC1155, options: Coinbase::Client::MultiTokenContractOptions.new( uri: uri ).to_body } ) end new(contract) end |
.create_nft_contract(address_id:, wallet_id:, name:, symbol:, base_uri:) ⇒ SmartContract
Creates a new ERC721 token contract, that can subsequently be deployed to the blockchain.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/coinbase/smart_contract.rb', line 83 def self.create_nft_contract( address_id:, wallet_id:, name:, symbol:, base_uri: ) contract = Coinbase.call_api do smart_contracts_api.create_smart_contract( wallet_id, address_id, { type: Coinbase::Client::SmartContractType::ERC721, options: Coinbase::Client::NFTContractOptions.new( name: name, symbol: symbol, base_uri: base_uri ).to_body } ) end new(contract) end |
.create_token_contract(address_id:, wallet_id:, name:, symbol:, total_supply:) ⇒ SmartContract
Creates a new ERC20 token contract, that can subsequently be deployed to the blockchain.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/coinbase/smart_contract.rb', line 50 def self.create_token_contract( address_id:, wallet_id:, name:, symbol:, total_supply: ) contract = Coinbase.call_api do smart_contracts_api.create_smart_contract( wallet_id, address_id, { type: Coinbase::Client::SmartContractType::ERC20, options: Coinbase::Client::TokenContractOptions.new( name: name, symbol: symbol, total_supply: BigDecimal(total_supply).to_i.to_s ).to_body } ) end new(contract) end |
.list_events(network_id:, protocol_name:, contract_address:, contract_name:, event_name:, from_block_height:, to_block_height:) ⇒ Enumerable<Coinbase::ContractEvent>
Returns a list of ContractEvents for the provided network, contract, and event details.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/coinbase/smart_contract.rb', line 15 def self.list_events( network_id:, protocol_name:, contract_address:, contract_name:, event_name:, from_block_height:, to_block_height: ) Coinbase::Pagination.enumerate( lambda { |page| list_events_page( network_id, protocol_name, contract_address, contract_name, event_name, from_block_height, to_block_height, page ) } ) do |contract_event| Coinbase::ContractEvent.new(contract_event) end end |
Instance Method Details
#abi ⇒ Array<Hash>
Returns the ABI of the Smart Contract.
198 199 200 |
# File 'lib/coinbase/smart_contract.rb', line 198 def abi JSON.parse(@model.abi) end |
#contract_address ⇒ String
Returns the contract address of the SmartContract.
186 187 188 |
# File 'lib/coinbase/smart_contract.rb', line 186 def contract_address @model.contract_address end |
#deploy! ⇒ SmartContract
Deploys the signed SmartContract to the blockchain.
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/coinbase/smart_contract.rb', line 247 def deploy! raise TransactionNotSignedError unless transaction.signed? @model = Coinbase.call_api do smart_contracts_api.deploy_smart_contract( wallet_id, deployer_address, id, { signed_payload: transaction.signature } ) end @transaction = Coinbase::Transaction.new(@model.transaction) self end |
#deployer_address ⇒ String
Returns the address of the deployer of the SmartContract.
192 193 194 |
# File 'lib/coinbase/smart_contract.rb', line 192 def deployer_address @model.deployer_address end |
#id ⇒ String
Returns the SmartContract ID. NOTE: This is not the contract address and is primarily used before the contract is deployed.
174 175 176 |
# File 'lib/coinbase/smart_contract.rb', line 174 def id @model.smart_contract_id end |
#inspect ⇒ String
Same as to_s.
307 308 309 |
# File 'lib/coinbase/smart_contract.rb', line 307 def inspect to_s end |
#network ⇒ Coinbase::Network
Returns the Network of the SmartContract.
180 181 182 |
# File 'lib/coinbase/smart_contract.rb', line 180 def network @network ||= Coinbase::Network.from_id(@model.network_id) end |
#options ⇒ Coinbase::Client::SmartContractOptions
Returns the options of the SmartContract.
216 217 218 |
# File 'lib/coinbase/smart_contract.rb', line 216 def @model. end |
#reload ⇒ SmartContract
Reloads the Smart Contract model with the latest version from the server side.
266 267 268 269 270 271 272 273 274 275 276 277 278 |
# File 'lib/coinbase/smart_contract.rb', line 266 def reload @model = Coinbase.call_api do smart_contracts_api.get_smart_contract( wallet_id, deployer_address, id ) end @transaction = Coinbase::Transaction.new(@model.transaction) self end |
#sign(key) ⇒ SmartContract
Signs the SmartContract deployment transaction with the given key. This is required before broadcasting the SmartContract.
238 239 240 241 242 |
# File 'lib/coinbase/smart_contract.rb', line 238 def sign(key) raise unless key.is_a?(Eth::Key) transaction.sign(key) end |
#status ⇒ String
Returns the status of the SmartContract.
228 229 230 |
# File 'lib/coinbase/smart_contract.rb', line 228 def status transaction.status end |
#to_s ⇒ String
Returns a string representation of the SmartContract.
313 314 315 316 317 318 319 320 321 322 323 |
# File 'lib/coinbase/smart_contract.rb', line 313 def to_s Coinbase.pretty_print_object( self.class, network: network.id, contract_address: contract_address, deployer_address: deployer_address, type: type, status: status, options: Coinbase.pretty_print_object('Options', **) ) end |
#transaction ⇒ Coinbase::Transaction
Returns the transaction.
222 223 224 |
# File 'lib/coinbase/smart_contract.rb', line 222 def transaction @transaction ||= Coinbase::Transaction.new(@model.transaction) end |
#type ⇒ Coinbase::Client::SmartContractType
Returns the type of the SmartContract.
210 211 212 |
# File 'lib/coinbase/smart_contract.rb', line 210 def type @model.type end |
#wait!(interval_seconds = 0.2, timeout_seconds = 20) ⇒ SmartContract
Waits until the Smart Contract deployment is signed or failed by polling the server at the given interval. deployment to land on-chain, in seconds
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
# File 'lib/coinbase/smart_contract.rb', line 286 def wait!(interval_seconds = 0.2, timeout_seconds = 20) start_time = Time.now loop do reload return self if transaction.terminal_state? if Time.now - start_time > timeout_seconds raise Timeout::Error, 'SmartContract deployment timed out. Try waiting again.' end self.sleep interval_seconds end self end |
#wallet_id ⇒ String
Returns the ID of the wallet that deployed the SmartContract.
204 205 206 |
# File 'lib/coinbase/smart_contract.rb', line 204 def wallet_id @model.wallet_id end |