Code Monkey home page Code Monkey logo

safe-airdrop's Introduction

Gnosis Safe - CSV Airdrop; A Safe App for Easy Transfers

Send arbitrarily many distinct tokens, to arbitrarily many distinct accounts with various different values from a CSV file in a single Safe transaction!

Motivation & Usage Guide

Have you encountered the painful task of sending out multiple token transfers to several recipients with various different values? Not only do you have to have to initiate multiple transactions, but then each transaction requires a signature threshold followed by the time it takes to have each transaction mined... Well these days are over! Finally a Safe App which allows you to transfer various ERC20 tokens to arbitrarily many recipients for varying amounts in a single Ethereum transaction. Its as simple as uploading a CSV "transfer" file and submitting a single transaction.

In this article, we demonstrate how to use the Gnosis Safe - CSV Airdrop

❤️ Donate ❤️

If you find this app useful for your onchain activities or would like to contribute, donations are welcomed at

0xD011a7e124181336ED417B737A495745F150d248

This can also be done directly in the the app on your next airdrop via the "Donate" button!

Loading the App in Gnosis Safe Interface

The current version is deployed on IPFS at https://cloudflare-ipfs.com/ipfs/QmUFKPZSn73LiwznQ3PVWQXpcaWVdYrSM6c5DES2y24EYd

For older deployed versions, you can find the IPFS hash under Releases.

On mainnet or rinkeby, you can navigate to the Gnosis Safe Apps tab and load the app from "Add Custom App", then follow the instructions below to perform your first airdrop.

Note that, the mainnet version relies on the Uniswap Default Token List for token icons and number of decimal places. If you plan to airdrop a token that is not a member of this list, you will have to provide the number of decimal places as the decimals column on each unlisted token transfer in your transfer file.

Preparing a Transfer File

Transfer files are expected to be in CSV format with the following minimally required columns:

  • receiver: Ethereum address of transfer receiver.
  • token_address: Ethereum address of ERC20 token to be transferred.
  • amount: the amount of token to be transferred.

An example transfer file would look as follows:

token_address,receiver,amount
0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.02
0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.04
0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.06
0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.08
0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.10

Here we have 5 transfers, each for a different token, going to a different receiver and for different amounts. On the rinkeby network, these tokens are GNO, OWL, DAI, USDC and GUSD respectively.

Native Token Transfers

Since native tokens do not have a token address, you must leave the token_address column blank for native transfers. An example transfer file containing only native transfers is here. Of course, these files can be mixed as follows;

token_address,receiver,amount
0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d,0x206a9EAa7d0f9637c905F2Bf86aCaB363Abb418c,1
,0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0.0002

which (on xdai) represents a transfer for 1 wxDai and 0.0002 native xDai.

Initializing your Transaction

Navigate to the APPS page from within your Gnosis Safe MultiSig. If you don't already have a Safe, you can create one for free!

  1. Open up the CSV Airdrop App, which looks like this:

  1. Upload your Transfer File and verify that the tokens, recipients and amounts are displayed as expected.

  1. Click Submit, execute and wait for your transaction to be mined.

A successful transaction will look like the following example on etherscan:

Developers Guide

Install dependencies and start a local dev server.

yarn install
cp .env.sample .env
yarn start

Then:

  • If HTTPS is used (by default enabled)
  • Go to Safe Multisig web interface
  • Create your test safe
  • Go to Apps -> Manage Apps -> Add Custom App
  • Paste your localhost URL, default is https://localhost:3000/
  • You should see Safe Airdrop as a new app
  • Develop your features from there

safe-airdrop's People

Contributors

bh2smith avatar dependabot[bot] avatar lukasschor avatar schmanu avatar usame-algan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

safe-airdrop's Issues

Decimals Column Malfunction

Using attached transfer file, first, second and last tokens were not part of uniswap default token list so decimals column had to be included.

receiver,token_address,amount,decimals
0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0x543ff227f64aa17ea132bf9886cab5db55dcaddf,3000,18
0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0x8f8221afbb33998d8584a2b05749ba73c37a938a,5000,18
0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c,100,18
0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0xdd974d5c2e2928dea5f71b9825b8b646686bd200,100,18
0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0x6810e776880c02933d47db1b9fc05908e5386b96,0.631565947557546711,18
0x7f01D9b227593E033bf8d6FC86e634d27aa85568,0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6,100,18

Unfortunately, something went wrong with the transfer as seen in the linked transaction:

https://etherscan.io/tx/0x9788d5d9c660f073c6a34a5b83a759f8c42d3d29432f593fcb308a2cae780255

My guess is that 5000 * 10^18 was too big and the BigNumber got screwed.

Provide Tool Tip with instructions

Not sure how to best achieve this because we can't link to github readme from within the app.

Is there some way to embed a markdown file with instructions in the app page with a local reference?

provide network specific sample files

Currently the sample only works for mainnet, which causes confusion for first time users.

We should provide a dedicated sample file for each supported network.

Correct Native Token Symbol on all networks

Based on Feedback here

The summary for native tokens on Xdai, Polygon & BSC shows them as ETH and I think it would be nice to provide feedback per native token

We do already have a network map with native token symbols in the code. I believe this was working in the past, but we must have accidentally removed this...

tokenlist is being fetched too often

Currently the tokenList is being fetched on every(?) render which is definitely not what we want.

I would want to refactor the whole tokenList structure a bit so that everything is memoized / cached correctly.

Add link to instructions

The main page of the app should contain some link to the instructions. Perhaps converting the Markdown to HTML and storing it in the page as a local link (but this will be hard to include images). Also might not hurt to get the instructions onto docs.gnosis.io where the link wont be refused (Note that the github link was refused by the safe app for some reason).

Dai transfer to 2 recipients, mainnet, metamask, doesn't work

token_address,receiver,amount,decimals
0x6b175474e89094c44da98b954eedeac495271d0f,0xDD00AB99Bff97E93AC1D0390F8e2ce41221050FE,21440,18
0x6b175474e89094c44da98b954eedeac495271d0f,0x77F6C1385eBd43ebe2B2de51C3E5d52cD4651278,19400,18

I realize the decimals column is unnecessary.

Here are the errors from the javascript console:

Missing Infura key!
Error: invalid BigNumber string (argument="value", value="2.144e+22", code=INVALID_ARGUMENT, version=bignumber/5.0.12)
GET wss://mainnet.infura.io/ws/v3/undefined

The app worked 1 month ago (albeit with ETH, not DAI)

Using firefox, metamask

Warn if more decimals than supported are provided for a token

Currently if we have a Token with i.e. 2 decimals and we provide 4 decimals: 0.1234 we will cut off after the second decimal and ignore the other ones.

This can lead to unexpected behaviour. Currently the UI displays all decimals (in the table for instance) and does not show the cut-off decimals.
I think this should generate a warning in the code editor and display only the decimals which are going to be submitted in the table.

Allow user to Clear Form and reupload

The button to clear form might look like this

      <Button
            size="lg"
            color="secondary"
            onClick={() => {
              setTransferContent([]);;
            }}
          >
            Clear Form
      </Button>

But we may also need a more sophisticated file upload that allows us to re-up the same file twice.

Parse JSON

Instead of just allowing CSV upload, this application should also allow to upload JSON files with the following example format:

[
    {
        "amount": "0.001",
        "tokenAddress": "0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b",
        "receiver": "0x100000000000000000000000000000000000000"
    },
    {
        "amount": "0.002",
        "tokenAddress": "0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b",
        "receiver": "0x2000000000000000000000000000000000000000"
    },
    {
        "amount": "0.003",
        "tokenAddress": "0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b",
        "receiver": "0x3000000000000000000000000000000000000000"
    },
    {
        "amount": "0.004",
        "tokenAddress": "0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b",
        "receiver": "0x4000000000000000000000000000000000000000"
    }
]

How many airdrops per transaction can I do?

Hi,
Thanks for the app. I'm trying to find out how many airdrops per transaction can I send?. I have to do batch airdrops like thousands of them and you know the gas fees are high these days. Other solutions normally can do up to 150 airdrops per transaction, how much is this going to do? After I create a safe, can I batch transfer 1000s of airdrops in a single safe transaction?

Include native ETH transfer instruction on main interface

Related, and possibly a better solution to, #163

on the right hand side of the app we should include a little text box with two very important FAQ facts:

  1. To send ETHER leave the token_address field blank. See sample CSV file for example.
  2. Please remember to leave the column headers (token_address, receiver and amount) as the first row of your CSV.

Have been getting a lot of questions/confusion about these two points from several places.

Include FAQ in README

Users have been reaching out to Gnosis Employees with a few common questions:

  • What is the maximum number of addresses that tokens can be sent to in a single transaction using the CSV Airdrop app?
  • In the token_address field, what address do I put if I am transferring ETH?

Perhaps it would be good to include a simple FAQ in the README. Will attempt this soon/later.

Make Script Version of App

Recently a user had a use case for the app where they wanted to send 130k transfers. Naturally this would never fit into a single transaction so it would make sense to break the transfer file up into smaller chunks and separate initialize transactions for each batch (i.e. transactions with incrementing nonce). Of course it would be nice to do all this directly from the interface, but it might also be nice if these kinds of airdrop could also be done from the shell (like in the good old days before this app was born).

The initial project introducing the logic for this app is here with a simple JS script that would parse csv transfer file and submit a multisend transaction to the safe interface for signing and executing.

https://github.com/gnosis/dex-liquidity-provision/blob/master/scripts/airdrop.js

As a start, it would be nice to port this old script to here. When attempting to use it we noticed that the dependencies are way outdated and so certain networks (like polygon) didn't even exist back then. That is, this script porting is expected to take a bit more effort than ripping the code out and putting it here. That and, of course, it should be written in TS instead of JS. This means we would also leave the truffle tooling behind in favour of hardhat.

Be less strict about the metadata interface for erc1155

According to https://eips.ethereum.org/EIPS/eip-1155#metadata the following should be true for ERC1155 contracts:

If the optional ERC1155Metadata_URI extension is included:

The ERC-165 supportsInterface function MUST return the constant value true if 0x0e89341c is passed through the interfaceID argument.

So currently we check each ERC1155 contract for this interface value and if it returns false we don't try to fetch metadata such as the token name / image of the token ID.

BUT as the real world shows. Most ERC 1155 contracts do not correctly implement ERC-165 and don't return true on the supportsInterface call. That's why we should not check for that interface anymore.

Replace safe app icon

Currently the gnosis safe shows the React-icon as the app's icon.

We display our own icon here.

Fetch token decimals by address from EVM

Currently the CSV file is expected to contain token decimals (to avoid making any read queries to the EVM). This is subject to user error and would be much safer if the token's decimals were recovered directly from the token data itself.

[Bug] Upload from button acting weird

When I use the "Upload File Button" I get my finder window opening again after selecting a file, and again (the second time it actually renders the file) and again. If I cancel on the third time everything is fine, but if I select the file the third time I get this error:

Screenshot 2021-05-20 at 21 27 07

Add support for Multiple TokenLists

Currently we use only the uniswap default token list, but we could also take the union over any number of token lists so to provide support for as many tokens as possible:

See here where they incorporate multiple token lists.

Found some mainnet tokens with awkward decimals

Just wanted to keep these here to make sure we include tests that ensure the app works properly with these. Decimals 0, 1, 2, 3 and 24.

{"chainId":1,"address":"0x2cad4991f62fc6fcd8ec219f37e7de52b688b75a","name":"Schain Wallet","symbol":"SCHA","decimals":0,"logoURI":"https://assets.coingecko.com/coins/images/12135/thumb/schain.png?1597462731"},

{"chainId":1,"address":"0x193408ca0576b73156ed42a2ea7d6fd3f6507162","name":"Infinity Esaham","symbol":"INFS","decimals":1,"logoURI":"https://assets.coingecko.com/coins/images/10716/thumb/WBUD9cx.png?1582524776"},

{"chainId":1,"address":"0xd2be3722b17b616c51ed9b8944a227d1ce579c24","name":"Dtube Coin","symbol":"DTUBE","decimals":2,"logoURI":"https://assets.coingecko.com/coins/images/13126/thumb/dtube_logo.png?1605500467"},

{"chainId":1,"address":"0x9235bda06b8807161b8fbb1e102cb654555b212f","name":"Feellike","symbol":"FLL","decimals":3,"logoURI":"https://assets.coingecko.com/coins/images/12075/thumb/FLL_logo_200.png?1596751266"}

{"chainId":1,"address":"0xaba8cac6866b83ae4eec97dd07ed254282f6ad8a","name":"YAM v2","symbol":"YAMV2","decimals":24,"logoURI":"https://assets.coingecko.com/coins/images/12179/thumb/YAM-v2.png?1597892396"}

Inlude env reader for passing Infura Key

Currently we can invoke web3 to encode transfer data, but if (for example) we wanted to fetch token decimals, this would require passing an infura key to query the EVM.

This should be as easy as depending on dotenv, but doesn't appear to work as expected.

Unresponsive File Upload & Drag+Drop

Recently we have had a user (Chrome on Windows) who cannot upload the sample file:

When dragging the file in the drop box is highlighted in red indicating that the app already knows the file will not be supported.

Screenshot 2021-11-17 at 10 33 07 AM

I can only assume that the file was somehow changed by the OS after download. We have tried manually altering the file extension to be explicitly csv. but this may have resulted in bein renamed to sample.csv.whatever_ms_added_cuz_it_sucks. It is unclear if the actual file extension was modified by the operating system (since it doesn't display file extensions in the file navigator).

CSV Airdrop App has been unusable in Gnosis Safe for 1 month+

hey all! when I try to use the CSV Airdrop app (which I used without issue up until the beginning of August) I get this error:

"invalid ENS name (argument="name", value=undefined, code=INVALID_ARGUMENT, version=providers/5.4.3)"
to be clear: I'm not using any ENS names just straight hexadecimal addresses

not being able to use this app anymore is a major issue actually as our DAO has many recurring payments that get made out of gnosis. any insight here?

Allow/Support Chain Prefixes in CSV

Based on the v2 release review (safe-global/safe-apps-list#92 (comment)) we got this feature request.

I think it would be neat to either allow chain prefixes on the CSV file or ignore them when performing a drain.
As when doing so with an address with chain prefix it automatically populates the CSV with it, making it invalid:

Follow link for images.

xdai: network does not support ENS

Gnosis Safe CSV Airdrop app doesn't work on xdai 😢

network does not support ENS (operation="ENS", network="xdai", code=UNSUPPORTED_OPERATION, version=providers/5.4.0)

Even without ENS I would expect that I can send to addresses without ENS.

E2E Test on Ganache

The test would perform something like the following steps:

  1. Deploy Safe
  2. Mint Tokens and fund the Safe
  3. Execute a multisend of token transfers
  4. Verify that recipients balances are indeed updated

Large Test File

Before we launch this, we should probably make sure that this app functions properly on a transfer file of size 200. Technically it should be able to handle about 240 without exceeding 50% of the block gas limit.

This transfer file should have unique recipients (for an actual real live airdrop), but doesn't need to have so many distinct tokens (say 10).

We could check that we aren't double querying the token data. Any lag that is experienced is assumed to be for the ens name resolution (which we can't really avoid). I wonder if it makes sense to include a toggle which enables or disables the ens features for larger transfer files.

Rinkeby Transfer file with same 12 rows repeated over and over token_address,receiver,amount 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x2000000000000000000000000000000000000000,0.0002 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x3000000000000000000000000000000000000000,0.0003 0xa7d1c04faf998f9161fc9f800a99a809b84cfc9d,0x4000000000000000000000000000000000000000,0.0004 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x5000000000000000000000000000000000000000,0.0005 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea,0x6000000000000000000000000000000000000000,0.0006 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x7000000000000000000000000000000000000000,0.0007 0x4dbcdf9b62e891a7cec5a2568c3f4faf9e8abe2b,0x8000000000000000000000000000000000000000,0.0008 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0x9000000000000000000000000000000000000000,0.01 0x784b46a4331f5c7c495f296ae700652265ab2fc6,0xa000000000000000000000000000000000000000,0.02 0x4dcf5ac4509888714dd43a5ccc46d7ab389d9c23,0xb000000000000000000000000000000000000000,2 0xd0dab4e640d95e9e8a47545598c33e31bdb53c7c,0x1000000000000000000000000000000000000000,0.0001

Support greater than 3-digit amounts

Currently, I'm not able to transfer more than amount = 999 tokens in a single transfer. This is with 18 decimals.

Attempting to transfer 1000 tokens results in an error where the transaction is not generated within the Safe.

App.tsx:127 Error: invalid BigNumber string (argument="value", value="1e+21", code=INVALID_ARGUMENT, version=bignumber/5.0.12)
    at e.value (index.ts:205)
    at e.value (index.ts:217)
    at e.value (index.ts:221)
    at Function.value (bignumber.ts:230)
    at r.value (number.js:13)
    at array.js:41
    at Array.forEach (<anonymous>)
    at H (array.js:27)
    at r.value (tuple.js:19)
    at e.value (abi-coder.js:82)

The workaround is to transfer to the same address twice in a batch -- e.g. 2 transfers of 500 for a total transfer of 1000. But that doesn't scale well to higher amounts like 10,000.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.