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 |