0

Is it possible to create an account in mainnet using RPC calls?

First, I built EOSIO nodeos in my own remote server, and I successfully created my coworker's account using cleos.

$ cleos system newaccount <MY ACCOUNT> <COWORKER's ACCOUNT> <owner-publickey><active-publickey> --stake-net "0.1 EOS" --stake-cpu "0.1 EOS" --buy-ram-kbytes 4

Now, I went on to create an account using RPC call for my web service.

However, there is not system api available from developers.eos.io/eosio-nodeos/reference.

I went on to search a bit deeper.

As I felt a bit frustrated, I decided to test this eosjs library to make a new account using one of the Block Producer's public API endpoints, and it worked!

The source code is like this.

// Configure BP httpEndpoint and chainId
const config = {
  chainId: 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906', 
  keyProvider: ['MY PRIVATE KEY'],  
  httpEndpoint: 'https://api.eosnewyork.io:443',
  verbose: false, // API activity
  broadcast: true,
  sign: true,
  expireInSeconds: 60
}

// Create a client
const eos = Eos(config)

// Make a transaction to create a new account
eos.transaction(tr => {
  tr.newaccount({
    creator: 'myaccount',
    name: 'coworker's account',
    owner: pubkey,
    active: pubkey
})

  tr.buyrambytes({
    payer: 'myaccount',
    receiver: 'coworker's account',
    bytes: 8192
})

  tr.delegatebw({
    from: 'myaccount',
    receiver: 'coworker's account',
    stake_net_quantity: '0.1000 EOS',
    stake_cpu_quantity: '0.1000 EOS',
    transfer: 0
  })
})

I wonder how could this be possible? I believe eosjs library uses https APIs, right? Is there something I am missing?

Thanks in advance.

  • What exactly is the question here? Are you asking how to use eosjs? – TeeAttack42 Jul 12 '18 at 8:56
  • @TeeAttack42 I am asking making a new account using eosjs works well. But, how? because there is no HTTP api that is available to request to make a new account. – JayB Kim Jul 12 '18 at 9:00
  • when you use cleos, you can do this, cleos --print-request --print-response system newaccount, and you will find all the requests send to the node, the command will send many requests. – Jimmy Guo Jul 12 '18 at 10:00
0

Yes it is possible. The eosjs library uses the HTTP-RPC Endpoints you mentioned aswell.

The RPC calls to look at are the push_transaction(s) calls.

For standard actions like buyrambytes, newaccount and delegatebw the eosjs library has implemented some "shortcuts". The library will build a transaction containing the action and build the required JSON structure with signatures and block infos which will be pushed to the chain ( or endpoint you defined).

The required data will be the JSON-Body of the HTTP request and will look something like this.

{ 
 expiration: 1,
 ref_block_num: 1,
 ref_block_prefix: 1,
 max_net_usage_words: 1,
 max_cpu_usage_ms: 1,
 delay_sec: 1,
 context_free_actions: [ '' ],
 actions: [ "create account" ],
 signatures: [ keys ],
 context_free_data: [ '' ],
 transaction_extensions: '' },
}
|improve this answer|||||
  • I really appreciate for taking the time to explain in detail. – JayB Kim Jul 12 '18 at 9:28
  • @JayBKim No problem. If this answer does satisfy your question please mark it as accepted so others will find it aswell. – TeeAttack42 Jul 12 '18 at 10:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.