0xd66cb988…27a7sent to0x00000000…ace7·#19,413,769·view on Etherscan
data:application/vnd.facet.tx+json;rule=esip6,{"op":"create","data":{"init_code_hash":"0x52c3226b3e5045a92e0a3975978997b7e5af223021470a1deb14211511dd04c9","args":{},"source_code":"pragma(:rubidity, \"1.0.0\")\ncontract(:ERC20, abstract: true) {\n event(:Transfer, { from: :address, to: :address, amount: :uint256 })\n event(:Approval, { owner: :address, spender: :address, amount: :uint256 })\n string(:public, :name)\n string(:public, :symbol)\n uint8(:public, :decimals)\n uint256(:public, :totalSupply)\n mapping(({ address: :uint256 }), :public, :balanceOf)\n mapping(({ address: mapping(address: :uint256) }), :public, :allowance)\n constructor(name: :string, symbol: :string, decimals: :uint8) {\n s.name=name\n s.symbol=symbol\n s.decimals=decimals\n }\n function(:approve, { spender: :address, amount: :uint256 }, :public, :virtual, returns: :bool) {\n s.allowance[msg.sender][spender] = amount\n emit(:Approval, owner: msg.sender, spender: spender, amount: amount)\n return true\n }\n function(:transfer, { to: :address, amount: :uint256 }, :public, :virtual, returns: :bool) {\n require(s.balanceOf[msg.sender] >= amount, \"Insufficient balance\")\n s.balanceOf[msg.sender] -= amount\n s.balanceOf[to] += amount\n emit(:Transfer, from: msg.sender, to: to, amount: amount)\n return true\n }\n function(:transferFrom, { from: :address, to: :address, amount: :uint256 }, :public, :virtual, returns: :bool) {\n allowed = s.allowance[from][msg.sender]\n require(s.balanceOf[from] >= amount, \"Insufficient balance\")\n require(allowed >= amount, \"Insufficient allowance\")\n s.allowance[from][msg.sender] = allowed - amount\n s.balanceOf[from] -= amount\n s.balanceOf[to] += amount\n emit(:Transfer, from: from, to: to, amount: amount)\n return true\n }\n function(:_mint, { to: :address, amount: :uint256 }, :internal, :virtual) {\n s.totalSupply += amount\n s.balanceOf[to] += amount\n emit(:Transfer, from: address(0), to: to, amount: amount)\n }\n function(:_burn, { from: :address, amount: :uint256 }, :internal, :virtual) {\n require(s.balanceOf[from] >= amount, \"Insufficient balance\")\n s.balanceOf[from] -= amount\n s.totalSupply -= amount\n emit(:Transfer, from: from, to: address(0), amount: amount)\n }\n}\ncontract(:ERC20BatchTransfer) {\n event(:BatchTransfer, { tokenAddress: :address, recipients: [:address], amounts: [:uint256] })\n event(:WithdrawStuckTokens, { tokenAddress: :address, to: :address, amount: :uint256 })\n uint256(:public, :singleTxAirdropLimit)\n constructor {\n s.singleTxAirdropLimit=50\n }\n function(:batchTransfer, { tokenAddress: :address, recipients: [:address], amounts: [:uint256] }, :public) {\n require(recipients.length > 0, \"Must import at least one address\")\n require(recipients.length == amounts.length, \"Address and amount arrays must be the same length\")\n require(recipients.length <= s.singleTxAirdropLimit, \"Cannot import more than #{s.singleTxAirdropLimit.toString} addresses at a time\")\n forLoop(condition: ->(i) {\n i < recipients.length\n }, max_iterations: s.singleTxAirdropLimit) { |i|\n to = recipients[i]\n amount = amounts[i]\n ERC20(tokenAddress).transferFrom(from: msg.sender, to: to, amount: amount)\n }\n emit(:BatchTransfer, tokenAddress: tokenAddress, recipients: recipients, amounts: amounts)\n }\n function(:withdrawStuckTokens, { tokenAddress: :address, to: :address, amount: :uint256 }, :public) {\n ERC20(tokenAddress).transfer(to: to, amount: amount)\n emit(:WithdrawStuckTokens, tokenAddress: tokenAddress, to: to, amount: amount)\n }\n}\n"}}