EOS RAM and Bandwith Analysis: Airdropping steps on Junglenet

in #eos6 years ago (edited)

I was studying about EOS RAM Allocation, CPU and NET bandwith and I was wondering about how much it costs to organize a real airdrop. So I just came up with this small experiment in Jungle testnet which can be totally adapted to Mainnet, because the storage and bandwith are the same you can just adjust the current EOS and RAM prices.

<p dir="auto">It's actually super simple to Airdrop a token in EOS <3 <ol> <li>Create an account for your smart contract <li>Download the official <a href="https://github.com/EOSIO/eos/tree/013c282edb3513078c573d4feb626403778af954/contracts/eosio.token" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link"><code>eosio.token from eos repository <li>Compile and deploy it to your contract <li>Create your token symbol and supply <li>Start issuing tokens <p dir="auto">I'm going to cover all the above steps below, let's go! <p dir="auto"><img src="https://images.hive.blog/768x0/https://cdn.steemitimages.com/DQmS4WQ1c4wY4efKZMSiV8D8terkEQdYEKwazPFZvGW3x8r/image.png" alt="EOS AirDropping" srcset="https://images.hive.blog/768x0/https://cdn.steemitimages.com/DQmS4WQ1c4wY4efKZMSiV8D8terkEQdYEKwazPFZvGW3x8r/image.png 1x, https://images.hive.blog/1536x0/https://cdn.steemitimages.com/DQmS4WQ1c4wY4efKZMSiV8D8terkEQdYEKwazPFZvGW3x8r/image.png 2x" /><br /> <em>Getty Images <h2>Default Account creation on Junglenet <p dir="auto">Created account <code>eosairdroper<span> from <a href="http://dev.cryptolions.io/#account" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">http://dev.cryptolions.io/#account <p dir="auto">Here's the initial account balance and stake stats: <pre><code>$ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 3.365 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 0 bytes available: 19.29 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 0 us available: 3.862 sec limit: 3.862 sec <h2>Deploying the <code>eosio.token contract <p dir="auto">Simple deploy from original EOS Repo without any changes: <pre><code>$ cleos set contract eosairdroper ~/eos/build/contracts/eosio.token ~/eos/build/contracts/eosio.token/eosio.token.wast ~/eos/build/contracts/eosio.token/eosio.token.abi Reading WAST/WASM... Assembling WASM... Publishing contract... executed transaction: d4025c7627d3a8334451ca382be86867eed55f2a442205ac269db8d4228554ca 8496 bytes 3203 us # eosio <= eosio::setcode {"account":"eosairdroper","vmtype":0,"vmversion":0,"code":"0061736d01000000017e1560037f7e7f0060057f7... # eosio <= eosio::setabi {"account":"eosairdroper","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d6... # >>>> checking account stats <<<< $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 189.7 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 8.298 Kb available: 19.28 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 1.817 ms available: 3.86 sec limit: 3.862 sec <p dir="auto">Balance stats: <ul> <li>Used RAM: 186.335 Kb (From 3.365 Kb, To 189.7 Kb) <li>Used NET: 8.298 Kb (From 0 Kb, To 8.298 Kb) <li>Used CPU: 1.817 ms (From 0 ms, To 1.817 ms) <p dir="auto">Yeah, the cost to deploy <code>eosio.token is 186.335 Kb with today's version! Ok, the fun begins... Let's create a token! <h2>Creating a token <p dir="auto">Default token, 1 billion supply and four decimals exactly like EOS. <pre><code>$ cleos push action eosairdroper create '[ "eosairdroper", "1000000000.0000 TOKEN", 0, 0, 0]' -p eosairdroper executed transaction: 7123c8e34853205b9176a8d02526a570f32e908212f0a3eff7e9dd9544803101 120 bytes 738 us # eosairdroper <= eosairdroper::create {"issuer":"eosairdroper","maximum_supply":"1000000000.0000 TOKEN"} # >>>> checking account stats <<<< $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 190 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 8.314 Kb available: 19.28 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 2.656 ms available: 3.859 sec limit: 3.862 sec <p dir="auto">Balance stats: <ul> <li>Used RAM: 0.3 Kb (From 189.7 Kb, To 190 Kb) <li>Used NET: 0.016 Kb (From 8.298 Kb, To 8.314 Kb) <li>Used CPU: 0.839 ms (From 1.817 ms, To 2.656 ms) <p dir="auto">Neat! To create a token we spent very little resources, almost nothing... <h2>Issuing some Tokens <p dir="auto">Now let's airdrop some tokens! <p dir="auto">I'm using some random accounts from the official snapshot (sorry if you are one of them): <div class="table-responsive"><table> <thead> <tr><th>account<th>snapshot balance <tbody> <tr><td>gm4domrtgqge<td>12.6521 EOS <tr><td>gu2dkmztgage<td>606.0000 EOS <tr><td>gu2dgmrrguge<td>6233.0000 EOS <tr><td>gu2dgmrshege<td>15000.9383 EOS <tr><td>ge3tgmzxhege<td>172150.0000 EOS <pre><code>cleos push action eosairdroper issue '["gu2dgmrshege", "15000.9383 TOKEN", "airdrop"]' -p eosairdroper executed transaction: f81bf85f5fe51e2bb78e8f3398e384b17587d1abb21255ca4e5dc64874fac263 128 bytes 2467 us # eosairdroper <= eosairdroper::issue {"to":"gu2dgmrshege","quantity":"15000.9383 TOKEN","memo":"airdrop"} # eosairdroper <= eosairdroper::transfer {"from":"eosairdroper","to":"gu2dgmrshege","quantity":"15000.9383 TOKEN","memo":"airdrop"} # gu2dgmrshege <= eosairdroper::transfer {"from":"eosairdroper","to":"gu2dgmrshege","quantity":"15000.9383 TOKEN","memo":"airdrop"} cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 190.2 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 8.346 Kb available: 19.28 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 3.787 ms available: 3.858 sec limit: 3.862 sec <p dir="auto">Balance stats: <ul> <li>Used RAM: 0.2 Kb (From 190 Kb, To 190.2 Kb) <li>Used NET: 0.032 Kb (From 8.314 Kb, To 8.346 Kb) <li>Used CPU: 1.131 ms (From 2.656 ms, To 3.787 ms) <h3>More Tokens Issuing <pre><code>cleos push action eosairdroper issue '["gu2dgmrrguge", "6233.0000 TOKEN", "airdrop"]' -p eosairdroper executed transaction: 26a0477eaa5147e454a0a2c4c436ae5d4b356deddc303d4a0ad43108c3480307 128 bytes 2122 us $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 190.4 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 7.506 Kb available: 19.28 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 5.567 ms available: 3.856 sec limit: 3.862 sec $ cleosjn push action eosairdroper issue '["gu2dkmztgage", "606.0000 TOKEN", "airdrop"]' -p eosairdroper executed transaction: a642adfaf2a715e7bf9a8ecb2d9f8cd1cbc4925ffb7edbbbe1c78b77383de487 128 bytes 2291 us $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 190.7 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 7.443 Kb available: 19.28 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 7.719 ms available: 3.854 sec limit: 3.862 sec cleos push action eosairdroper issue '["gm4domrtgqge", "12.6521 TOKEN", "airdrop"]' -p eosairdroper executed transaction: 6a9695ba0508bb967b08341794ba49a597276971d2c34f7178a06db089b39943 128 bytes 2326 us $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 190.9 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 7.561 Kb available: 19.28 Mb limit: 19.29 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 9.026 ms available: 3.853 sec limit: 3.862 sec <h3>After 6 Hours sleep ZzZzz <p dir="auto">It looked like my net and cpu bandwith has reduced a little bit, perfect! <pre><code>$ cleos push action eosairdroper issue '["ge3tgmzxhege", "172150.0000 TOKEN", "airdrop"]' -p eosairdroper executed transaction: 704ba42b779cbb7a77ca0160511c7178117c65700ec2da40f0579e3ecdaa6594 128 bytes 2375 us $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 191.2 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 6.129 Kb available: 19.2 Mb limit: 19.2 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 9.543 ms available: 3.835 sec limit: 3.845 sec <h3>Big airdrop to B1 <p dir="auto">Testing a big amount Airdrop to b1 (not that they need it lol - usually this would go to the Airdrop team): <pre><code>$ cleos push action eosairdroper issue '["b1", "100000000.0100 TOKEN", "airdrop"]' -p eosairdroper executed transaction: 8458b5f23d6764333db5ba2d8133cabe65265abf6ecf674810a8eb1de05e25f7 128 bytes 2540 us # eosairdroper <= eosairdroper::issue {"to":"b1","quantity":"100000000.0100 TOKEN","memo":"airdrop"} # eosairdroper <= eosairdroper::transfer {"from":"eosairdroper","to":"b1","quantity":"100000000.0100 TOKEN","memo":"airdrop"} # b1 <= eosairdroper::transfer {"from":"eosairdroper","to":"b1","quantity":"100000000.0100 TOKEN","memo":"airdrop"} $ cleos get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 191.4 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 6.22 Kb available: 19.2 Mb limit: 19.2 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 11.66 ms available: 3.833 sec limit: 3.845 sec <h3>No Memo <p dir="auto">Testing an airdrop with no memo to another random account <code>ge3dmgenesis: 1000.5425 EOS - it reduced from 128 bytes to 120 bytes of net bandwith usage, no significative changes in cpu and didn't affect anything on RAM, AT ALL - Remember, from the <code>eosio.token contract we don't store the memo anywhere. <pre><code>cleos push action eosairdroper issue '["ge3dmgenesis", "1000.5425 TOKEN", ""]' -p eosairdroper executed transaction: 34d05c59c10049ae946ad4e66703bb42987d1a1ce248115f3bea4bb6b1120e7f 120 bytes 2387 us $ cleosjn get account eosairdroper permissions: owner 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB active 1: 1 EOS84uT4DBAJQpagWDfZPbk2hd9aaH8ZGZUxHTrpdjCqCzMEVP8cB memory: quota: 623.2 Kb used: 191.6 Kb net bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 6.275 Kb available: 19.2 Mb limit: 19.2 Mb cpu bandwidth: staked: 100.0000 EOS (total stake delegated from account to self) delegated: 0.0000 EOS (total staked delegated to account from others) used: 13.22 ms available: 3.831 sec limit: 3.845 sec <h2>Results <p dir="auto">If we assume the above values as an approximated average (I would need to load a batch of a couple thousands accounts to make sure), these are the stats that we will need for a full airdrop based on the <a href="https://github.com/eoscafe/eos-snapshot-validation" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">official mainnet launch snapshot: <div class="table-responsive"><table> <thead> <tr><th>Stat<th>Avg / tx<th>Total 163,930 Accounts <tbody> <tr><td>Net Bandwith<td>128 bytes<td>20.98 Mb <tr><td>Cpu Bandwith<td>~2.36 ms<td>386.87 sec <tr><td>RAM<td>0.229 kb<td>37,540 kb <p dir="auto">You will eventually want to remove some accounts like B1, exchanges and so on from the airdrop.<br /> Also these are other interesting stats from the genesis snapshot: <div class="table-responsive"><table> <thead> <tr><th>Minimum EOS Balance<th>Number of Accounts <tbody> <tr><td>0.0000 EOS<td>163,930 <tr><td>1.0000 EOS<td>162,106 <tr><td>5.0000 EOS<td>148,624 <tr><td>10.0000 EOS<td>137,950 <tr><td>100.0000 EOS<td>84,979 <h2>Mainnet <p dir="auto">As of today's date, a couple hours ago we had an account creation with a RAM price of 0.015 EOS/Kb. <p dir="auto">So if you are planning an Airdrop now, with the official genesis snapshot it would cost<br /> around ~563 EOS, which right now translates to $6025.17 (USD). I'm not considering the net and cpu because it fully restores in 3 days, you could separate your airdrop in blocks. <p dir="auto">My next step is to run a big batch of thousands of tokens issuing transactions so I can prove all of these stats are correct. <p dir="auto">Also a <strong>BIG THANK YOU<span> to <a href="/@nsjames">@nsjames, <a href="/@syedjafri">@syedjafri and <a href="/@blockliberty">@blockliberty for the nice insights, discussions and prices! And of course to this amazing Jungle Testnet <a href="/@cryptolions">@cryptolions <p dir="auto"><span>**EDIT: Follow up article released: <a href="https://steemit.com/eos/@leordev/eos-ram-and-bandwith-analysis-2-tokens-claiming-and-achieving-zero-cost-airdrop" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">https://steemit.com/eos/@leordev/eos-ram-and-bandwith-analysis-2-tokens-claiming-and-achieving-zero-cost-airdrop **
Sort:  

Once people claim their tokens you get the ram back

Dan, thanks a lot for your input, it means A LOT to me!

<p dir="auto">So, that's something that I'm discussing with other fellas... What means "people claim"? I'm already engaged to create a <code>claim action and setup a claim table (intermediary), so when people claim their airdrop I would just transfer from my contract account to the <em>claimer account setting the <em>claimer as the payer. <p dir="auto">Am I missing something? It's already <code>out-of-the-box on the <code>issue action? Because it does not look like as the issuer is the <code>payer.

The existing code,

<pre><code>auto to = to_acnts.find( value.symbol.name() ); if( to == to_acnts.end() ) { to_acnts.emplace( ram_payer, [&]( auto& a ){ a.balance = value; }); } else { to_acnts.modify( to, 0, [&]( auto& a ) { a.balance += value; }); } <p dir="auto">This means that should the receiver not be pre-existing in the table with the corresponding symbol then the sender pays the RAM cost to create a record to do so. <p dir="auto">What if we created a preexisting record where there was a 'register' method which allowed anyone to call it and create an empty record in the to_acnts table, with a balance of 0.0000. <p dir="auto">Then, your own computer can listen for such action, check if they're on the airdrop list, and then trigger a transfer action, transferring the tokens to the receiver without such RAM cost. <p dir="auto">This wouldn't cast the net as wide as one would like as not every planned recipient would hit this 'register' action, however, you could have an 'Airdrop period' where if you do his this action, you're guaranteed to get the token early/day 1, if you don't, then you'll have to wait a little longer.

eosio.token to claim tokens already!hey @johnwilliamson nice idea buddy! with that we don't even need an intermediary table! it looks perfect! I'm still waiting for @dan answer because I don't want to redo any job if he tell us that they are planning or working in something of

That would mean the tokens are effectively moved from the smart contract account to the users account? or the user just pay the RAM used for his row in the smart contract?

"or the user just pay the RAM used for his row in the smart contract?"

Yes. This would have happened anyway once a user moves the tokens, however, if the airdropper doesn't want to pay that upfront cost initially or doesn't have enough confidence that those who receive the tokens will move them quick enough they can look into using this solution.

I am confused about this as well, because in the eosio.token contract, the issuer pays for the new tokens storage. Even if you issued to a middleman account, the sender (fromeosio.token contract is implemented on the mainnet and how we can create our own tokens using this contract.) always pays for storage, correct? @leordev I would love to be apart of this discussion with you and your team. I am also thinking about how the

sure man, just hit me up at telegram @leordev - I will be glad to help!

is there any guides to be a block producer?

I just saw your post on stack exchange as well. Thanks for this super useful information.

Eos updates are still being posted on Steem Blockchain........ When will you update us on 2.0? @dan

nice! but if people never claim, can sender rescind tokens sent to restore ram?

probably burn it after some period? so only active users get it

Good work. The number of Airdrops on this chain will be astonishing .

Jungle is the best!!!

Thank you! This has been a hot question for a while.

I was able to update my response here: https://eosio.stackexchange.com/questions/679/what-are-the-staking-requirements-to-launch-an-airdrop

If anyone's interested in the awesome EOS Jobs that are out there, I compiled some of the best telegram posts:
https://steemit.com/eos/@natp/amazing-jobs-available-on-eos-right-now

I've also got an Ultimate Dev Link Guide for everything that's out there:
https://steemit.com/eos/@natp/ultimate-eos-developer-link-guide

Thanks very much for your effort in putting it together my friend! I appreciate your feedback!


No problem! You may want to add this amazing tool: https://acoutts.com/eos/ by EOS New York SC: https://github.com/eosnewyork/erp

Great write up. Now I need to get up and running so I drop a token while RAM is cheap :p

<p dir="auto"><span>I was going to ask you a question here but it is probably better for the SE, <a href="https://eosio.stackexchange.com/questions/898/get-cleos-without-building-eos" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">https://eosio.stackexchange.com/questions/898/get-cleos-without-building-eos <p dir="auto">Know of any good instructions for installing <code>cleos on Ubuntu without building a node?

I think they already answered you, you have an option to go with docker... I didn't have time to see it yet because I compile the whole eos build in my machine... Thanks my friend!

Would like to know this also.

Although i will probably just upgrade my RAM to 8Gb and compile and run a node...

Thank you @leordev, for putting this together! Awesome job! Many thanks also to @nsjames, @syedjafri and @blockliberty ... re-steemed!

Nice work Leo ! Very interesting statistics!

Nice work @leordev. I am building a service that provides useful stats on resource prices here (EOS Resource Planner): https://acoutts.com/eos

Eventually it will be moved to a dedicated domain, but feel free to help contribute as it's open source: https://github.com/acoutts/erp

GOSH! This is amazing my friend!!! Congratulations for that, nice tool over there! I love the UI!


btw Great Job on the design :)
cheersHi @ff810000, I'm searching for a chart of the RAM price. Are you looking forward to implement that? If not do you know where else I can find this info?

Smart....... Do you have video tutorials on this and are you working on any project currently?

and he is also working with us as at BeSpiral <3


This really helps.Thank you @leordev, as well as @nsjames and @syedjafri.

Fantastic post. We are prepping for a summer launch + airdrop. Posts like these make me so excited for 2018 and EOS. Nice work!

Thank you loved your work ....

"Download the official eosio.token from eos repository
Compile and deploy it to your contract"
I don't think you need to setup a new eosio.token contract account.
eosio.token contract supports multiple tokens. You can issue your token using same account as was used to issue EOS tokens.

They are still building a bidding system, if I'm not wrong for now only eosio.token account can create tokens there.

Thanks! Do you know a way to list all tokens an account have?

no easy way to do it afaik... You would need a script to run cleos get currency balance for all the contracts and tokens symbols that you are watching for that specific account.

As I imagined, thanks for the reply. I tried to deploy eosio.token in mainnet but I get error 3080001: account using more than allotted RAM usage (it worked on testnet) do you know the exact amount of cpu, ram, net to buy or stake to run it?


Your post was mentioned in the Steemit Hit Parade for newcomers in the following category:Congratulations @leordev!

  • Comments - Ranked 7 with 32 comments

I also upvoted your post to increase its reward
If you like my work to promote newcomers and give them more visibility on Steemit, consider to vote for my witness!

Congratulations @leordev! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

<p dir="auto"><a href="http://steemitboard.com/@leordev" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link"><img src="https://images.hive.blog/768x0/https://steemitimages.com/70x70/http://steemitboard.com/notifications/firstcommented.png" srcset="https://images.hive.blog/768x0/https://steemitimages.com/70x70/http://steemitboard.com/notifications/firstcommented.png 1x, https://images.hive.blog/1536x0/https://steemitimages.com/70x70/http://steemitboard.com/notifications/firstcommented.png 2x" /> You got a First Reply <p dir="auto"><sub><em>Click on the badge to view your Board of Honor.<br /> <sub><em>If you no longer want to receive notifications, reply to this comment with the word <code>STOP <p dir="auto"><strong>Do not miss the <a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-world-cup-contest-results-of-day-4" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">last post<span> from <a href="/@steemitboard">@steemitboard! <hr /> <p dir="auto"><strong>Participate in the <a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-world-cup-contest-collect-badges-and-win-free-sbd" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">SteemitBoard World Cup Contest!<br /> Collect World Cup badges and win free SBD<br /> Support the Gold Sponsors of the contest: <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=good-karma&approve=1" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">@good-karma and <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=lukestokes.mhth&approve=1" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">@lukestokes <hr /> <blockquote> <p dir="auto">Do you like <a href="https://steemit.com/@steemitboard" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">SteemitBoard's project? Then <strong><a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Vote for its witness and <strong>get one more award!

Great work. So you said that:

I'm not considering the net and cpu because it fully restores in 3 days

how do you know this? any documents or codes in eos?

Guys,I just stumbled upon an absolute gem of a bounty by rawg.
the pay is upto $200 for just a retweet and share!(it's a special bounty which is only for the first 200)
Heres the link

KYC required! https://bitcointalk.org/index.php?topic=4147507.msg40536596#msg40536596

Thanks Leo! I had assumed that the token owner always owned the RAM so this caused me to go back and look at eosio.token.cpp. So it looks like in the standard eosio.token, when you get an airdrop, the token contract (party 1) owns the RAM. But if the holder (party 2) then does any other transfer, say to party 3, party 2 is now owns the row of RAM in party 1's multi-index. This is really interesting becuase I did not realize that multi-index had row-level ram ownership. However this party 2 ownership appears to take place only if party 3 did not previously have an entry for that token. If party 3 did own some of ABC token already, then to_acnts.modify is called, in which case the existing RAM owner is maintained. Does this all sound correct?