Method: Coinbase::StakingOperation.build

Defined in:
lib/coinbase/staking_operation.rb

.build(amount, network, asset_id, address_id, action, mode, options) ⇒ Coinbase::StakingOperation

Builds an ephemeral staking operation this is intended to be called via an Address or Wallet.

Parameters:

  • amount (BigDecimal)

    The amount to stake, in the primary denomination of the asset

  • network (Coinbase::Network, Symbol)

    The Network or Network ID

  • asset_id (Symbol)

    The Asset ID

  • address_id (String)

    The Address ID

  • action (Symbol)

    The action to perform

  • mode (Symbol)

    The staking mode

  • options (Hash)

    Additional options

Options Hash (options):

  • :integrator_contract_address (String)

    The integrator contract address. [asset_id: :eth, mode: :partial, action: all]

  • :funding_address (String)

    The address funding the 32 ETH (default: :address_id) [asset_id: :eth, mode: :native, action: :stake]

  • :withdrawal_address (String)

    The address receiving rewards and withdrawal funds. (default: :address_id) [asset_id: :eth, mode: :native, action: :stake]

  • :fee_recipient_address (String)

    The address receiving transaction fees. (default: :address_id) [asset_id: :eth, mode: :native, action: :stake]

  • :immediate (Boolean)

    To leverage “Coinbase Managed Unstake”. (default: false i.e. User Managed Unstake) [asset_id: :eth, mode: :native, action: :unstake]

  • :validator_pub_keys (String)

    List of comma separated validator public keys to unstake. (default: validators picked up on your behalf corresponding to the unstake amount.) [asset_id: :eth, mode: :native, action: :unstake]

Returns:



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/coinbase/staking_operation.rb', line 34

def self.build(amount, network, asset_id, address_id, action, mode, options)
  network = Coinbase::Network.from_id(network)
  asset = network.get_asset(asset_id)

  model = Coinbase.call_api do
    stake_api.build_staking_operation(
      {
        asset_id: asset.primary_denomination.to_s,
        address_id: address_id,
        action: action,
        network_id: Coinbase.normalize_network(network),
        options: {
          amount: asset.to_atomic_amount(amount).to_i.to_s,
          mode: mode
        }.merge(options)
      }
    )
  end

  new(model)
end