Class: Coinbase::Transfer

Inherits:
Object
  • Object
show all
Defined in:
lib/coinbase/transfer.rb

Overview

A representation of a Transfer, which moves an amount of an Asset from a user-controlled Wallet to another address. The fee is assumed to be paid in the native Asset of the Network. Transfers should be created through Wallet#transfer or Address#transfer.

Instance Method Summary collapse

Constructor Details

#initialize(model) ⇒ Transfer

Returns a new Transfer object. Do not use this method directly. Instead, use Wallet#transfer or Address#transfer.

Parameters:



17
18
19
20
21
# File 'lib/coinbase/transfer.rb', line 17

def initialize(model)
  raise unless model.is_a?(Coinbase::Client::Transfer)

  @model = model
end

Instance Method Details

#amountBigDecimal

Returns the amount of the asset for the Transfer.

Returns:

  • (BigDecimal)

    The amount of the asset



65
66
67
# File 'lib/coinbase/transfer.rb', line 65

def amount
  BigDecimal(@model.amount) / BigDecimal(10).power(@model.asset.decimals)
end

#assetObject



53
54
55
# File 'lib/coinbase/transfer.rb', line 53

def asset
  @asset ||= Coinbase::Asset.from_model(@model.asset)
end

#asset_idSymbol

Returns the Asset ID of the Transfer.

Returns:

  • (Symbol)

    The Asset ID



59
60
61
# File 'lib/coinbase/transfer.rb', line 59

def asset_id
  @model.asset_id.to_sym
end

#destination_address_idString

Returns the Destination Address ID of the Transfer.

Returns:

  • (String)

    The Destination Address ID



49
50
51
# File 'lib/coinbase/transfer.rb', line 49

def destination_address_id
  @model.destination
end

#from_address_idString

Returns the From Address ID of the Transfer.

Returns:

  • (String)

    The From Address ID



43
44
45
# File 'lib/coinbase/transfer.rb', line 43

def from_address_id
  @model.address_id
end

#idString

Returns the Transfer ID.

Returns:

  • (String)

    The Transfer ID



25
26
27
# File 'lib/coinbase/transfer.rb', line 25

def id
  @model.transfer_id
end

#inspectString

Same as to_s.

Returns:

  • (String)

    a String representation of the Transfer



151
152
153
# File 'lib/coinbase/transfer.rb', line 151

def inspect
  to_s
end

#network_idSymbol

Returns the Network ID of the Transfer.

Returns:

  • (Symbol)

    The Network ID



31
32
33
# File 'lib/coinbase/transfer.rb', line 31

def network_id
  Coinbase.to_sym(@model.network_id)
end

#reloadTransfer

Reload reloads the Transfer model with the latest version from the server side.

Returns:

  • (Transfer)

    The most recent version of Transfer from the server.



108
109
110
111
112
113
114
115
116
117
# File 'lib/coinbase/transfer.rb', line 108

def reload
  @model = Coinbase.call_api do
    transfers_api.get_transfer(wallet_id, from_address_id, id)
  end

  # Update memoized transaction.
  @transaction = Coinbase::Transaction.new(@model.transaction)

  self
end

#signed_payloadString

Returns the Signed Payload of the Transfer.

Returns:

  • (String)

    The Signed Payload



84
85
86
# File 'lib/coinbase/transfer.rb', line 84

def signed_payload
  @model.signed_payload
end

#statusSymbol

Returns the status of the Transfer.

Returns:

  • (Symbol)

    The status



102
103
104
# File 'lib/coinbase/transfer.rb', line 102

def status
  transaction.status
end

#to_sString

Returns a String representation of the Transfer.

Returns:

  • (String)

    a String representation of the Transfer



142
143
144
145
146
147
# File 'lib/coinbase/transfer.rb', line 142

def to_s
  "Coinbase::Transfer{transfer_id: '#{id}', network_id: '#{network_id}', " \
    "from_address_id: '#{from_address_id}', destination_address_id: '#{destination_address_id}', " \
    "asset_id: '#{asset_id}', amount: '#{amount}', transaction_link: '#{transaction_link}', " \
    "status: '#{status}'}"
end

#transactionCoinbase::Transaction

Returns the Transfer transaction.

Returns:



90
91
92
# File 'lib/coinbase/transfer.rb', line 90

def transaction
  @transaction ||= Coinbase::Transaction.new(@model.transaction)
end

#transaction_hashString

Returns the Transaction Hash of the Transfer.

Returns:

  • (String)

    The Transaction Hash



96
97
98
# File 'lib/coinbase/transfer.rb', line 96

def transaction_hash
  @model.transaction_hash
end

Returns the link to the transaction on the blockchain explorer.

Returns:

  • (String)

    The link to the transaction on the blockchain explorer



71
72
73
74
# File 'lib/coinbase/transfer.rb', line 71

def transaction_link
  # TODO: Parameterize this by Network.
  "https://sepolia.basescan.org/tx/#{transaction_hash}"
end

#unsigned_payloadString

Returns the Unsigned Payload of the Transfer.

Returns:

  • (String)

    The Unsigned Payload



78
79
80
# File 'lib/coinbase/transfer.rb', line 78

def unsigned_payload
  @model.unsigned_payload
end

#wait!(interval_seconds = 0.2, timeout_seconds = 20) ⇒ Transfer

Waits until the Transfer is completed or failed by polling the Network at the given interval. Raises a Timeout::Error if the Transfer takes longer than the given timeout.

Parameters:

  • interval_seconds (Integer) (defaults to: 0.2)

    The interval at which to poll the Network, in seconds

  • timeout_seconds (Integer) (defaults to: 20)

    The maximum amount of time to wait for the Transfer to complete, in seconds

Returns:

  • (Transfer)

    The completed Transfer object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/coinbase/transfer.rb', line 124

def wait!(interval_seconds = 0.2, timeout_seconds = 20)
  start_time = Time.now

  loop do
    reload

    return self if transaction.terminal_state?

    raise Timeout::Error, 'Transfer timed out' if Time.now - start_time > timeout_seconds

    self.sleep interval_seconds
  end

  self
end

#wallet_idString

Returns the Wallet ID of the Transfer.

Returns:

  • (String)

    The Wallet ID



37
38
39
# File 'lib/coinbase/transfer.rb', line 37

def wallet_id
  @model.wallet_id
end