@myria/airdrop-js
v0.0.7-alpha
Published
Airdrop in L1 with claim based approach
Downloads
183
Readme
airdrop-js
Supports transfer of ERC20 tokens to a list of recipient addresses in L1 with claim-based approach known as L1-Claim. Recipient who triggers claiming pays the gas fee
Prerequisites
The following tools need to be installed:
Capabilities and Frameworks
| Capability | Module | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Dependence Framework | typescript adds optional types to JavaScript that support tools for large-scale JavaScript applications, thirdweb-dev performant & lightweight SDK to interact with any EVM chain from Node, React and React Native | | Coding Standard | eslint statically analyzes your code to quickly find and fix problems based on opt-in rules, prettier an opinionated code formatter to build and enforce a style guide on save, eslint-config-prettier to turns off all rules that are unnecessary or might conflict with Prettier. | | Testing Framework | Jest a delightful JavaScript Testing Framework with a focus on simplicity. | | Useful Links | npmtrends Compare package download counts over time, act run your GitHub Actions locally, Actionlint static checker for GitHub Actions workflow files,TypeDoc is a documentation generator for TypeScript |
How to
Clone and run build
git clone [email protected]:myria-libs/airdrop-js.git
# install dependencies
npm install | yarn install
# run build
npm run build | yarn build
Run lint
# check lint's rules
npm run lint | yarn lint
# check lint's rules and try to fix
npm run lint:fix | yarn lint:fix
# format your code
npm run prettier:format | yarn prettier:format
Run test
npm test | yarn test
Integration as a consumer
- Generate merkleTree info from whitelist
// Configure snapshot
const SNAPSHOT_WHITELIST = [
{
recipient: '0x663217Fd41198bC5dB2F69313a324D0628daA9E8',
amount: 1,
},
];
const totalAmount = SNAPSHOT_WHITELIST.reduce(
(accumulator, currentValue) => accumulator + currentValue.amount,
0,
);
// Invoke airdrop-js to generate. Will be use as input for next step
const { merkleRoot, snapshotUri } = await generateMerkleRootByMyria(
snapshotWhitelist,
airdropAddress,
tokenAddress,
);
- Approve whitelist and allowance
import { Client, Config, Transaction, Type, Wallet } from '@myria/airdrop-js';
// 1. Partner plugs in necessary configs (credentials)
const config = Config.getInstance({})
.setTokenAddress($YOUR_TOKEN_CONTRACT_ADDRESS)
.setAirdropAddress($YOUR_AIRDROP_CONTRACT_ADDRESS)
.setThirdwebClientSecret($YOUR_THIRD_WEB_CLIENT_SECRETE)
.setSelectedChain(Type.SupportingChain.SEPOLIA)
.setDebug(true);
// partner retrieve the necessary variable
const { airdropContract, tokenContract, client } = getThirdwebContract(
Config.getInstance().getThirdwebClientSecret(),
config.getTokenAddress(),
config.getAirdropAddress(),
Config.getInstance().getSelectedChain(),
);
// partner inject ETH_PRIVATE_KEY from their system
const { privateKeyToAccount } = Wallet;
const ownerContractAccount = privateKeyToAccount({
client,
privateKey: ETH_PRIVATE_KEY,
});
// 2. Partner invokes `airdrop-js` to perform approve whitelist and allowance on-chain
const { approveWhitelistAndAllowance } = Transaction;
const approveWhitelistAndAllowanceResult = await approveWhitelistAndAllowance(
ownerContractAccount,
merkleRoot,
snapshotUri,
airdropContract,
tokenContract,
totalAmount,
{
retries: 3,
delay: 1000,
},
{
extraMaxPriorityFeePerGasPercentage:
Type.DEFAULT_EXTRA_PRIORITY_TIP_PERCENTAGE,
extraGasPercentage: Type.DEFAULT_EXTRA_GAS_PERCENTAGE,
extraOnRetryPercentage: Type.DEFAULT_EXTRA_ON_RETRY_PERCENTAGE,
},
);
Full E2E integration reference in the example/src/index.js. Should be straightforward
Collaboration
- We use the git rebase strategy to keep tracking meaningful commit message. Help to enable rebase when pull
$ git config --local pull.rebase true
- Follow TypeScript Style Guide Google
- Follow Best-Practices in coding:
- Clean code make team happy
- Return early make code safer and use resource Efficiency
- Truthy & Falsy make code shorter
- SOLID Principles make clean code
- DRY & KISS avoid redundancy and make your code as simple as possible
- Make buildable commit and pull latest code from
main
branch frequently - Follow the Semantic Versioning once we are ready for release
- Use readable commit message karma
/‾‾‾‾‾‾‾‾
🔔 < Ring! Please use semantic commit messages
\________
<type>(<scope>): ([issue number]) <subject>
│ │ | │
| | | └─> subject in present tense. Not capitalized. No period at the end.
| | |
│ │ └─> Issue number (optional): Jira Ticket or Issue number
│ │
│ └─> Scope (optional): eg. Articles, Profile, Core
│
└─> Type: chore, docs, feat, fix, refactor, style, ci, perf, build, or test.