Class: IOSTSdk::Main

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/iost_sdk.rb

Constant Summary collapse

DEFAULTS =
{
  gas_limit: 2_000_000,
  gas_ratio: 1,
  delay: 0,
  expiration: 90,
  approval_limit_amount: :unlimited
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint:) ⇒ Main

Returns a new instance of Main.

Parameters:

  • endpoint (String)

    a URL of the JSON RPC endpoint of IOST



30
31
32
33
34
35
36
37
# File 'lib/iost_sdk.rb', line 30

def initialize(endpoint:)
  @endpoint = endpoint
  @client = IOSTSdk::Http::Client.new(base_url: @endpoint)

  DEFAULTS.each do |k, v|
    instance_variable_set("@#{k}".to_sym, v)
  end
end

Instance Attribute Details

#approval_limit_amountObject

Returns the value of attribute approval_limit_amount.



16
17
18
# File 'lib/iost_sdk.rb', line 16

def approval_limit_amount
  @approval_limit_amount
end

#clientObject (readonly)

Returns the value of attribute client.



15
16
17
# File 'lib/iost_sdk.rb', line 15

def client
  @client
end

#delayObject

Returns the value of attribute delay.



16
17
18
# File 'lib/iost_sdk.rb', line 16

def delay
  @delay
end

#expirationObject

Returns the value of attribute expiration.



16
17
18
# File 'lib/iost_sdk.rb', line 16

def expiration
  @expiration
end

#gas_limitObject

Returns the value of attribute gas_limit.



16
17
18
# File 'lib/iost_sdk.rb', line 16

def gas_limit
  @gas_limit
end

#gas_ratioObject

Returns the value of attribute gas_ratio.



16
17
18
# File 'lib/iost_sdk.rb', line 16

def gas_ratio
  @gas_ratio
end

#transactionObject

Returns the value of attribute transaction.



16
17
18
# File 'lib/iost_sdk.rb', line 16

def transaction
  @transaction
end

Instance Method Details

#call_abi(contract_id:, abi_name:, abi_args:) ⇒ Object

Create an instance of IOSTSdk::Models::Transaction with an action to call the ABI.

Parameters:

  • contract_id (String)

    a Contract’s ID

  • abi_name (String)

    the name of an ABI to call

  • abi_args (any)

    args to the ABI

Returns:

  • a new instance of Transaction



57
58
59
60
61
62
63
64
65
# File 'lib/iost_sdk.rb', line 57

def call_abi(contract_id:, abi_name:, abi_args:)
  transaction = init_transaction
  transaction.add_action(contract_id: contract_id, action_name: abi_name, action_data: abi_args)
  transaction.add_approve(token: '*', amount: :unlimited)
  transaction.set_time_params(expiration: expiration, delay: delay)

  @transaction = transaction
  self
end

#new_account(name:, creator:, owner_key:, active_key:, initial_ram:, initial_gas_pledge:) ⇒ Object

Create an instance IOSTSdk::Models::Transaction to create a new account

Parameters:

  • name (String)

    the name of the account to be created

  • creator (String)

    the name of the account that’s creating a new account

  • owner_key (IOSTSdk::Crypto::KeyPair)

    the owner key of the new account

  • active_key (IOSTSdk::Crypto::KeyPair)

    the active key of the new account

  • initial_ram (Integer)

    the initial RAM of the new account

  • initial_gas_pledge (Integer)

    the initial gas pledge of the new account



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/iost_sdk.rb', line 95

def (name:, creator:, owner_key:, active_key:, initial_ram:, initial_gas_pledge:)
  transaction = init_transaction
  transaction.add_action(
    contract_id: 'auth.iost',
    action_name: :signUp,
    action_data: [name, owner_key.id, active_key.id]
  )

  if initial_ram > 10
    transaction.add_action(
      contract_id: 'ram.iost',
      action_name: :buy,
      action_data: [creator, name, initial_ram]
    )
  end

  if initial_gas_pledge > 0
    transaction.add_action(
      contract_id: 'ram.iost',
      action_name: :buy,
      action_data: [creator, name, initial_gas_pledge.to_s]
    )
  end

  transaction.set_time_params(expiration: expiration, delay: delay)
  transaction.add_approve(token: '*', amount: approval_limit_amount)

  @transaction = transaction
  self
end

#sign_and_send(account_name:, key_pair:) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/iost_sdk.rb', line 41

def sign_and_send(account_name:, key_pair:)
  if @transaction
    @client.send_tx(
      transaction: @transaction,
      account_name: ,
      key_pair: key_pair
    )
  end
end

#transfer(token:, from:, to:, amount:, memo:) ⇒ Object

Create an instance IOSTSdk::Models::Transaction with an action to transfer tokens

Parameters:

  • token (String)

    name of the token in the transfer

  • from (String)

    sender

  • to (String)

    recipient

  • amount (Integer)

    amount to transfer

  • memo (String)

    memo/notes for the transfer

Returns:

  • a new instance of Transaction



75
76
77
78
79
80
81
82
83
84
85
# File 'lib/iost_sdk.rb', line 75

def transfer(token:, from:, to:, amount:, memo:)
  call_abi(
    contract_id: 'token.iost',
    abi_name: :transfer,
    abi_args: [token, from, to, amount, memo]
  )
  @transaction.add_approve(token: :iost, amount: amount)
  @transaction.set_time_params(expiration: expiration, delay: delay)

  self
end