offchainlabs / arbitrum-tutorials Goto Github PK
View Code? Open in Web Editor NEWGet started developing on Arbitrum
Get started developing on Arbitrum
There now are published packages of the smart contracts in the main arbitrum repo.
We can add them as a dependency and import from there instead of having duplicated files
reported
TypeError: bridge.getOutgoingMessageState is not a function
Hi!
I'm trying to run the custom token bridging example but it is hanging on the transaction to register the custom token. In particular it freezes on this line:
Here is the output of the script:
Environmental variables properly set ๐
๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
Deploying the cutsom token to L1
custom token is deployed to L1 at 0xd67C1679e90f84f463d6dd2eb279120E41F91725
Deploying the cutsom token to L2
custom token is deployed to L2 at 0x12B1194D5382B7cb36B2f7d1E8EE5Eec95080BA7
Current retryable base submission prices for custom bridge and raouter are: 6791741008
L2 gas price: 15906060
Registering the custom token on L2 with 318134783482016 callValue for L2 fees:
An example of gas cost infact:
Txn Batch Index:
558713
Submission Tx Hash:
0x1135778a0fd4b849cb4940899ca8ebdecb5d3edb98d6023eed49db33886d5cb1
Poster Fee:
0.0001991562 ETH
Network Fee:
0.000014138 ETH
L1 Gas Used:
1,991,562
L2 Gas Used:
141,380
Estimate result:
L2G 3296429
L2G + B 5710054
When I run this commant 'yarn run token-deposit', the result is as follows.
yarn run v1.22.17
$ hardhat run scripts/exec.js
Environmental variables properly set ๐
๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
Arbitrum Demo: Deposit token using arb-ts
Lets
Go โก๏ธ
...๐
Deploying the test DappToken to L1
DappToken is deployed to L1 at 0xa4C7B1FEC327EA8cfC48Ad0D748feA6d662EF83f
0xa4C7B1FEC327EA8cfC48Ad0D748feA6d662EF83f
You successfully allowed the Arbitrum Bridge to spend DappToken 0x04f724d93d94d231877770553445f15625d79f48a1d7926b9ebf38e2d816d579
Error: invalid address or ENS name (argument="name", value=undefined, code=INVALID_ARGUMENT, version=contracts/5.5.0)
at Logger.makeError (E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\logger\src.ts\index.ts:225:28)
at Logger.throwError (E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\logger\src.ts\index.ts:237:20)
at Logger.throwArgumentError (E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\logger\src.ts\index.ts:241:21)
at E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\contracts\src.ts\index.ts:120:16
at step (E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\contracts\lib\index.js:48:23)
at Object.next (E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\contracts\lib\index.js:29:53)
at fulfilled (E:\Git\arbitrum-tutorials\packages\token-deposit\node_modules@ethersproject\contracts\lib\index.js:20:58)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
reason: 'invalid address or ENS name',
code: 'INVALID_ARGUMENT',
argument: 'name',
value: undefined
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Why does this problem occur?
Hello
Im trying to estimate gas for transaction using
https://github.com/OffchainLabs/arbitrum-tutorials/tree/master/packages/gas-estimation
It works fine when I estimate simple transaction like sending ETH between 2 addresses without any additional data.
But when I pass the smart contract data like this:
0x1114cd2a000000000000000000000000000000000000000000000000000000000000006f000000000000000000000000409d44c6998bbdaa982f14b1cf2f12958b70abd800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000000000003b02337f0000000000000000000000000000000000000000000000000000000000000014409d44c6998bbdaa982f14b1cf2f12958b70abd8000000000000000000000000
Script always return an error.
Error: call revert exception; VM Exception while processing transaction: reverted with reason string "Stargate: msg.value must be > _amountLD" [ See: https://links.ethers.org/v5-errors-CALL_EXCEPTION ] (method="gasEstimateComponents(address,bool,bytes)", data="0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002753746172676174653a206d73672e76616c7565206d757374206265203e205f616d6f756e744c4400000000000000000000000000000000000000000000000000", errorArgs=["Stargate: msg.value must be > _amountLD"], errorName="Error", errorSignature="Error(string)", reason="Stargate: msg.value must be > _amountLD", code=CALL_EXCEPTION, version=abi/5.7.0)
at Logger.makeError (C:\Users\97158\Documents\GitHub\layerZero\node_modules@ethersproject\logger\src.ts\index.ts:269:28)
at Logger.throwError (C:\Users\97158\Documents\GitHub\layerZero\node_modules@ethersproject\logger\src.ts\index.ts:281:20)
errorSignature: 'Error(string)',
address: '0x00000000000000000000000000000000000000C8',
args: [
'0xbf22f0f184bccbea268df387a49ff5238dd23e40',
false,
'0x1114cd2a000000000000000000000000000000000000000000000000000000000000006f000000000000000000000000409d44c6998bbdaa982f14b1cf2f12958b70abd800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000000000003b02337f0000000000000000000000000000000000000000000000000000000000000014409d44c6998bbdaa982f14b1cf2f12958b70abd8000000000000000000000000'
],
transaction: {
data: '0xc94e6eeb000000000000000000000000bf22f0f184bccbea268df387a49ff5238dd23e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e41114cd2a000000000000000000000000000000000000000000000000000000000000006f000000000000000000000000409d44c6998bbdaa982f14b1cf2f12958b70abd800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000000000003b02337f0000000000000000000000000000000000000000000000000000000000000014409d44c6998bbdaa982f14b1cf2f12958b70abd800000000000000000000000000000000000000000000000000000000000000000000000000000000',
to: '0x00000000000000000000000000000000000000C8'
And this error looks like nodeInterface.callStatic.gasEstimateComponents
trying to execute transaction instead of estimate it.
transaction details.
0xbf22f0f184bccbea268df387a49ff5238dd23e40 - smart contract
swapETH - method
contract.methods
.swapETH(
destinationChainId, //111
request.senderAccount.address, //my address
request.senderAccount.address, //my address
request.amount, //0.04 eth (in wei)
minAmount //0.04 eth * 0.99 (in wei)
)
.encodeABI();
const baseL2Provider = new providers.StaticJsonRpcProvider(
"https://arb1.arbitrum.io/rpc"
);
addDefaultLocalNetwork();
const destinationAddress =contractAddress;
const nodeInterface = NodeInterface__factory.connect(
NODE_INTERFACE_ADDRESS,
baseL2Provider
);
//THROWING HERE
const gasEstimateComponents =
await nodeInterface.callStatic.gasEstimateComponents(
destinationAddress,
false,
data,
{
blockTag: "latest",
}
);
const l1GasEstimated = gasEstimateComponents.gasEstimateForL1;
const l2GasUsed = gasEstimateComponents.gasEstimate.sub(
gasEstimateComponents.gasEstimateForL1
);
const l2EstimatedPrice = gasEstimateComponents.baseFee;
const l1EstimatedPrice = gasEstimateComponents.l1BaseFeeEstimate.mul(16);
const l1Cost = l1GasEstimated.mul(l2EstimatedPrice);
const l1Size = l1Cost.div(l1EstimatedPrice);
const P = l2EstimatedPrice;
const L2G = l2GasUsed;
const L1P = l1EstimatedPrice;
const L1S = l1Size;
// L1C (L1 Cost) = L1P * L1S
const L1C = L1P.mul(L1S);
// B (Extra Buffer) = L1C / P
const B = L1C.div(P);
// G (Gas Limit) = L2G + B
const G = L2G.add(B);
// TXFEES (Transaction fees) = P * G
const TXFEES = P.mul(G);
return {
fullGas: G.toNumber(),
transactionFee: TXFEES.toNumber(),
};
When running npm run custom-token-bridging
from the custom-token-bridging folder I get the following error:
My .env variables are set, this appears to be an issue with the L2 provider:
Set as:
# Hosted Aggregator Node (JSON-RPC Endpoint)
L2RPC="https://rinkeby.arbitrum.io/rpc"
Added this code and it appears to fail at the l2Wallet.getChainId()
call:
await arbLog('Setting Up Your Token With The Generic Custom Gateway')
/**
* Use wallets to create an arb-ts bridge instance
* We'll use bridge for its convenience methods around registering tokens to the custom gateway
*/
console.log("chainId L1", await l1Wallet.getChainId())
console.log("chainId L2", await l2Wallet.getChainId())
console.log("completed")
Output:
chainId L1 4
Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.4.5)
at Logger.makeError (/home/jwu/code/notional-finance/arbitrum-tutorials/node_modules/@ethersproject/logger/src.ts/index.ts:225:28)
at Logger.throwError (/home/jwu/code/notional-finance/arbitrum-tutorials/node_modules/@ethersproject/logger/src.ts/index.ts:237:20)
at JsonRpcProvider.<anonymous> (/home/jwu/code/notional-finance/arbitrum-tutorials/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:396:23)
at step (/home/jwu/code/notional-finance/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
at Object.throw (/home/jwu/code/notional-finance/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
at rejected (/home/jwu/code/notional-finance/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
at runNextTicks (internal/process/task_queues.js:60:5)
at listOnTimeout (internal/timers.js:524:9)
at processTimers (internal/timers.js:498:7) {
reason: 'could not detect network',
code: 'NETWORK_ERROR',
event: 'noNetwork'
}
Would be useful if we had a tutorial for when devs want to redeem through a script a retryable ticket that has failed.
yarn run token_deposit
failed with the following error:
Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.4.2)
at Logger.makeError (/home/ubuntu/research/arbitrum/arbitrum-tutorials/node_modules/@ethersproject/logger/src.ts/index.ts:213:28)
at Logger.throwError (/home/ubuntu/research/arbitrum/arbitrum-tutorials/node_modules/@ethersproject/logger/src.ts/index.ts:225:20)
at JsonRpcProvider.<anonymous> (/home/ubuntu/research/arbitrum/arbitrum-tutorials/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:396:23)
at step (/home/ubuntu/research/arbitrum/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
at Object.throw (/home/ubuntu/research/arbitrum/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
at rejected (/home/ubuntu/research/arbitrum/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
at runNextTicks (internal/process/task_queues.js:62:5)
at listOnTimeout (internal/timers.js:523:9)
at processTimers (internal/timers.js:497:7) {
reason: 'could not detect network',
code: 'NETWORK_ERROR',
event: 'noNetwork'
}
And the environmental variables were properly set.
1.The main thing
Arbitrum is a second-level (L2) solution for the Ethereum network developed by the American company Offchain Labs. The project is designed to increase the speed and scalability of the underlying blockchain.
Arbitrum uses the Optimistic Rollups concept, allowing developers to easily run smart contracts and decentralized Ethereum applications with lower translation fees and increased bandwidth without any changes.
In the first half of 2022, Arbitrum became the leading L2 solution for Ethereum in terms of the number of transactions, the number of applications and the volume of blocked liquidity (TVL).
Who created Arbitrum?
The Arbitrum L2 solution was developed by the American company Offchain Labs, created in 2018 in New York by Ed Felten, Stephen Goldfeder and Harry Kalodner. All three are specialists in cryptography and blockchain technology, Felten worked as a professor of computer science at Princeton University.
In 2019, Offchain Labs attracted a sowing investment of $3.7 million. In the spring of 2021, before the launch of the alpha version of the Arbitrum network, the startup held an investment round of Series A, as a result of which it received $20 million.
The official launch of the main Arbitrum One network took place on August 31, 2021. At the same time, Offchain Labs announced the attraction of $120 million in the B series round, which was headed by Lightspeed Venture Partners. Other significant investors include Polychain Capital, Ribbit Capital, Redpoint Ventures, Pantera Capital, Alameda Research and Mark Cuban. After this round, the company received an estimate of $1.2 billion.
3
What are the features of Arbitrum and what are Optimistic Rollups?
Low transaction speed and high commissions in Ethereum led to several projects at once, which started developing solutions on top of the main network in order to increase its performance.
The Arbitrum network uses Optimistic Rollups technology for this purpose. Transactions are processed on the second-tier network, while the main Ethereum network is responsible for the security layer. During processing in the L2 network, many transactions are combined into a compact block, which is included by validators into the main Ethereum network.
The term "optimistic" is a reference to the principle that implies that any transaction "optimistic" is considered authentic until proven otherwise. This concept was developed for a competing L2 network called Optimism. However, the developers of Arbitrum have improved the technology by introducing multi-stage fraud protection, which consumes significantly less gas than one-step protection in Optimism.
ETH is used to pay transaction fees in the Arbitrum network, as well as in Ethereum. Transfer to the Arbitrum network is on average 90-95% cheaper than Ethereum, and there remains great potential for further reduction of commissions.
Unlike other L2 networks, Arbitrum does not have a native token. Representatives of Offchain Labs did not announce any specific plans for its release. In August 2021, Ed Felten said in an interview that in the future network management could be transferred to DAO, which involves the issuance of a management token. This statement supports the hope of the crypto community for the distribution of tokens among early users, just as it happened in the Optimism network in early June 2022.
4
How does Arbitrum work?
Arbitrum is deployed at the first (L1) and second (L2) levels. The EthBridge component, which is a set of smart contracts, works on the Ethereum network and contains folders of incoming and outgoing transactions.
The transfer of transactions from L1 to L2 and back is the responsibility of its own virtual machine (Arbitrum Virtual Machine, AVM), which is fully compatible with the Ethereum Virtual Machine (EVM). AVM supports all EVM programming languages, such as Vyper, Solidity, Flint, YUL+, LLLL, which greatly simplifies application development.
In the L2 network, the ArbOS operating system executes smart contracts and processes transactions. It transfers transactions via AVM to the Rollup protocol outgoing transaction folder for further addition to the block, its confirmation and inclusion in the main Ethereum chain.
Validators who receive transaction fees for this are engaged in the approval of new blocks. The Arbitrum architecture is designed so that one honest validator can approve the block, no matter how many malicious validators exist.
Among the validator nodes, roles are distributed as follows:
Active validator - places a bet (places its ETH in a deposit smart contract) and offers new blocks to be added to the main Ethereum chain. If the proposed block is incorrect, the validator will lose the bet;
Protective validator - monitors the operation of the convolution protocol and intervenes in case of detection of incorrect blocks, offering its own block or betting on a block of another validator;
Watchmaker - only monitors the operation of the Rollup protocol without placing bets.
Due to the fact that security and watchdog validators have 8 days to challenge the block, the same period is the withdrawal of assets on the native bridge from Arbitrum to Ethereum.
5
What is included in the Arbitrum ecosystem?
As of the beginning of July 2022, more than 200 blockchain projects are already operating on the basis of Arbitrum. Among them:
The largest DeFi protocols are Uniswap, SushiSwap, Curve and 1inch;
Backup and algorithmic stablecoins USDT, USDC, DAI, FRAX, TUSD, etc. ;
Original services, such as the GMX perpetual contract trading platform and the dForce landing service;
Yield aggregators yEarn Finance, Pickle Finance, Badger, Beefy Finance;
NFT marketplaces Lootex, Stratos, ToFunFT, etc.
The Arbitrum network supports many Web3 wallets - MetaMask, Trust Wallet, MathWallet and others. In the first half of 2022, the largest centralized crypto exchanges, including Binance, OKX, Gate.io, KuCoin, FTX, etc. announced support for the Arbitrum network and the possibility of outputting ETH and a number of stablecoins. In addition, more than 20 crosschain bridges work with Arbitrum, including Multichain, Hop Exchange, Stargate, Across and others.
6
How is Arbitrum developing?
Arbitrum One is not only the most popular L2 solution for scaling Ethereum, but is also among the top 10 decentralized networks by TVL and the number of DeFi applications.
In June 2022, the 8-week Arbitrum Odyssey program was launched to popularize the Arbitrum One L2 network and attract users. It includes eight stages, each of which is devoted to a specific aspect of the Arbitrum ecosystem.
More than 140 thousand users took part in the first and second stages, causing network congestion and an increase in transaction fees. Users who have completed the tasks of each stage are awarded special NFTs from the Project Galaxy service. According to the terms of the competition, upon receipt of 12 tokens, the participant also receives another NFT, the purpose of which is not yet known. Only those who have fulfilled all the conditions of the first stage can participate in Arbitrum Odyssey.
In the near future, it is planned to release an update of Arbitrum Nitro, which will further reduce transaction fees and increase network bandwidth. The essence of the update is that for large projects on the network, for example, for blockchain games, AnyTrust chains will be deployed, which will operate under the management of a "committee" of 20 validators and should become a faster and cheaper analogue of sidechains.
When I run the tutorials such as token_deposit Tutorial, I got this error infomation:
Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.4.2)
at Logger.makeError (/home/xxx/projects/arbitrum-tutorials/node_modules/@ethersproject/logger/src.ts/index.ts:213:28)
at Logger.throwError (/home/xxx/projects/arbitrum-tutorials/node_modules/@ethersproject/logger/src.ts/index.ts:225:20)
at JsonRpcProvider.<anonymous> (/home/xxx/projects/arbitrum-tutorials/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:396:23)
at step (/home/xxx/projects/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
at Object.throw (/home/xxx/projects/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
at rejected (/home/xxx/projects/arbitrum-tutorials/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
at runNextTicks (internal/process/task_queues.js:62:5)
at listOnTimeout (internal/timers.js:523:9)
at processTimers (internal/timers.js:497:7) {
reason: 'could not detect network',
code: 'NETWORK_ERROR',
event: 'noNetwork'
}
Any idea?
Thanks.
I am seeing errors running the examples. Help? Thanks
https://github.com/OffchainLabs/arbitrum-tutorials/tree/master/packages/token-deposit
Command: npm run token-deposit
Error log
Deploying the test DappToken to L1
DappToken is deployed to L1 at 0x827F479Efde0aA5779a077Dd3f2D82a094ed517a
You successfully allowed the Arbitrum Bridge to spend DappToken 0xdf2ddff32f488f50aeb6ee34b87bbba58ed6b6a2030165e9a337bc64f416570e
Error: missing revert data in call exception (error={"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":53,\"error\":{\"code\":-32000,\"message\":\"gas price too low\"}}\n","error":{"code":-32000},"requestBody":"{\"method\":\"eth_call\",\"params\":[{\"to\":\"0x00000000000000000000000000000000000000c8\",\"data\":\"0x0b77bdb200000000000000000000000091169dbb45e6804743f94609de50d511c437572e00000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000195c107f3f75c4c93eba7d9a1312f19305d6375f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f92df1800000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e030000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002e42e567b36000000000000000000000000827f479efde0aa5779a077dd3f2d82a094ed517a0000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e030000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e03000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4461707020546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004444150500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"},\"latest\"],\"id\":53,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"https://rinkeby.arbitrum.io/rpc"}, data="0x", code=CALL_EXCEPTION, version=providers/5.4.5)
at Logger.makeError (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/logger/src.ts/index.ts:225:28)
at Logger.throwError (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/logger/src.ts/index.ts:237:20)
at checkError (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:34:16)
at JsonRpcProvider.<anonymous> (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:555:20)
at step (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
at Object.throw (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
at rejected (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
at processTicksAndRejections (node:internal/process/task_queues:93:5) {
reason: 'missing revert data in call exception',
code: 'CALL_EXCEPTION',
error: Error: processing response error (body="{\"jsonrpc\":\"2.0\",\"id\":53,\"error\":{\"code\":-32000,\"message\":\"gas price too low\"}}\n", error={"code":-32000}, requestBody="{\"method\":\"eth_call\",\"params\":[{\"to\":\"0x00000000000000000000000000000000000000c8\",\"data\":\"0x0b77bdb200000000000000000000000091169dbb45e6804743f94609de50d511c437572e00000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000195c107f3f75c4c93eba7d9a1312f19305d6375f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f92df1800000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e030000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002e42e567b36000000000000000000000000827f479efde0aa5779a077dd3f2d82a094ed517a0000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e030000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e03000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4461707020546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004444150500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"},\"latest\"],\"id\":53,\"jsonrpc\":\"2.0\"}", requestMethod="POST", url="https://rinkeby.arbitrum.io/rpc", code=SERVER_ERROR, version=web/5.4.0)
at Logger.makeError (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/logger/src.ts/index.ts:225:28)
at Logger.throwError (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/logger/src.ts/index.ts:237:20)
at /home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/src.ts/index.ts:284:28
at step (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/lib/index.js:33:23)
at Object.next (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/lib/index.js:14:53)
at fulfilled (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/lib/index.js:5:58)
at processTicksAndRejections (node:internal/process/task_queues:93:5) {
reason: 'processing response error',
code: 'SERVER_ERROR',
body: '{"jsonrpc":"2.0","id":53,"error":{"code":-32000,"message":"gas price too low"}}\n',
error: Error: gas price too low
at getResult (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:97:28)
at processJsonFunc (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/src.ts/index.ts:326:22)
at /home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/src.ts/index.ts:263:42
at step (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/lib/index.js:33:23)
at Object.next (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/lib/index.js:14:53)
at fulfilled (/home/t4sk/bkp/dev/tmp/arbitrum-tutorials/packages/token-deposit/node_modules/@ethersproject/web/lib/index.js:5:58)
at processTicksAndRejections (node:internal/process/task_queues:93:5) {
code: -32000,
data: undefined
},
requestBody: '{"method":"eth_call","params":[{"to":"0x00000000000000000000000000000000000000c8","data":"0x0b77bdb200000000000000000000000091169dbb45e6804743f94609de50d511c437572e00000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000195c107f3f75c4c93eba7d9a1312f19305d6375f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f92df1800000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e030000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002e42e567b36000000000000000000000000827f479efde0aa5779a077dd3f2d82a094ed517a0000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e030000000000000000000000006e3468ce9bcc4f4e5106abf4821a62db4d6a9e03000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4461707020546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004444150500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"latest"],"id":53,"jsonrpc":"2.0"}',
requestMethod: 'POST',
url: 'https://rinkeby.arbitrum.io/rpc'
},
data: '0x'
}
When I use this script https://github.com/OffchainLabs/arbitrum-tutorials/blob/master/packages/gas-estimation/scripts/exec.ts to estimate gas, it revert with NOT_OWNER error. I guess maybe that's because the NodeInterface contract(0x00000000000000000000000000000000000000C8) is not the owner of the contract. Is there anyway I can estimate the gas of an owner only function call?
I also tried to connect nodeInterface to the owner account, still fails.
const gasEstimateComponents = await nodeInterface.connect(ownerAccount).callStatic.gasEstimateComponents(
destinationAddress,
false,
txData,
{
blockTag: "latest"
}
);
The current code doesn't follow a specific style guide.
A solidity and js linter could be added
The main arbitrum repo uses this as a precommit hook
https://github.com/OffchainLabs/arbitrum/blob/338fa2da63c290faeaa27b848f1d93d60038aa09/.pre-commit-config.yaml#L53-L54
https://github.com/prettier-solidity/prettier-plugin-solidity
Is there a chance of a tutorial in building L3 on Arbitrum being published in the near future?
.
Hi - First off, great job on the token-deposit script. Ran it, and it worked great. However, I don't understand where the code that creates the bridged ERC20 contract comes from? And how does one verify the code on a tool like arbiscan?
Very excited to see those demos here. I am trying to run all the demos in local, but I am not sure which branch or tag of arbitrum is ready for this. For sure I had enjoyed those demos in testnet.
Thanks!
First, make a normal withdrawal:
yarn run withdrawETH
yarn run v1.22.19
$ hardhat run scripts/exec.js
Environmental variables properly set ๐
๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
Arbitrum Demo: Withdraw Eth via Arbitrum SDK
Lets
Go โก๏ธ
...๐
Wallet properly funded: initiating withdrawal now
Ether withdrawal initiated! ๐ฅณ 0xf8a6f02c5473e786844143502da7bb8a01bae40dd5dbfbbe086de05ef3cd3267
Withdrawal data: [
[
'0x683642c22feDE752415D4793832Ab75EFdF6223c',
'0x683642c22feDE752415D4793832Ab75EFdF6223c',
BigNumber {
_hex: '0xa2817bea8b6cac5396ae6d63456d574cbc6665c1dc87794530c8224d6aa846a7',
_isBigNumber: true
},
BigNumber { _hex: '0x01', _isBigNumber: true },
BigNumber { _hex: '0x1b', _isBigNumber: true },
BigNumber { _hex: '0x0594', _isBigNumber: true },
BigNumber { _hex: '0x6360d98c', _isBigNumber: true },
BigNumber { _hex: '0xe8d4a51000', _isBigNumber: true },
'0x',
caller: '0x683642c22feDE752415D4793832Ab75EFdF6223c',
destination: '0x683642c22feDE752415D4793832Ab75EFdF6223c',
hash: BigNumber {
_hex: '0xa2817bea8b6cac5396ae6d63456d574cbc6665c1dc87794530c8224d6aa846a7',
_isBigNumber: true
},
position: BigNumber { _hex: '0x01', _isBigNumber: true },
arbBlockNum: BigNumber { _hex: '0x1b', _isBigNumber: true },
ethBlockNum: BigNumber { _hex: '0x0594', _isBigNumber: true },
timestamp: BigNumber { _hex: '0x6360d98c', _isBigNumber: true },
callvalue: BigNumber { _hex: '0xe8d4a51000', _isBigNumber: true },
data: '0x'
]
]
To to claim funds (after dispute period), see outbox-execute repo ๐ซก
Done in 7.23s.
An error was encountered when calling outbox-exec
yarn outbox-exec --txhash 0xf8a6f02c5473e78684414350
2da7bb8a01bae40dd5dbfbbe086de05ef3cd3267
yarn run v1.22.19
$ hardhat outbox-exec --txhash 0xf8a6f02c5473e786844143502da7bb8a01bae40dd5dbfbbe086de05ef3cd3267
Environmental variables properly set ๐
๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
๐ต ๐ต
Arbitrum Demo: Outbox Execution
Lets
Go โก๏ธ
...๐
An unexpected error occurred:
ArbSdkError: No NodeCreated events found
at L2ToL1MessageReaderNitro.getBlockFromNodeNum (/home/test/arbitrum-tutorials2/node_modules/@arbitrum/sdk/dist/lib/message/L2ToL1MessageNitro.js:122:19)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at L2ToL1MessageReaderNitro.getSendProps (/home/test/arbitrum-tutorials2/node_modules/@arbitrum/sdk/dist/lib/message/L2ToL1MessageNitro.js:144:38)
at L2ToL1MessageReaderNitro.status (/home/test/arbitrum-tutorials2/node_modules/@arbitrum/sdk/dist/lib/message/L2ToL1MessageNitro.js:85:39)
at L2ToL1MessageWriter.status (/home/test/arbitrum-tutorials2/node_modules/@arbitrum/sdk/dist/lib/message/L2ToL1Message.js:160:20)
at module.exports (/home/test/arbitrum-tutorials2/packages/outbox-execute/scripts/exec.js:95:8)
at SimpleTaskDefinition.action (/home/test/arbitrum-tutorials2/packages/outbox-execute/hardhat.config.js:19:5)
at Environment._runTaskDefinition (/home/test/arbitrum-tutorials2/node_modules/hardhat/src/internal/core/runtime-environment.ts:219:14)
at Environment.run (/home/test/arbitrum-tutorials2/node_modules/hardhat/src/internal/core/runtime-environment.ts:131:14)
at main (/home/test/arbitrum-tutorials2/node_modules/hardhat/src/internal/cli/cli.ts:256:5) {
inner: undefined
}
error Command failed with exit code 1.
I had to checkout an earlier version of this repo (before upgrade to sdk 2.0) to make it work (with Arbitrum Rinkeby, without Nitro I think). The master version was using a function that doesn't actually exist in the 2.0 sdk.
Include things like redeeming directly, canceling, crediting eth to a custom credit back address, etc.
Once config is added scripts don't need to be converted all at once; they can (and should) be converted one a time
Good morning to all these doing some tests for testnet and continue to mainnet full node.
I have this doubt.
How do I get the key: DEVNET_PRIVKEY = "0x KEY?"
Please help me greetings
after using test-node.bash
in nitro repo, create a local test env
ArbSdkError: Unrecognized network 412346. at getNetwork (/Users/user/source/git/arbitrum-tutorials/node_modules/@arbitrum/sdk/dist/lib/dataEntities/networks.js:236:15) at processTicksAndRejections (node:internal/process/task_queues:96:5) at main (/Users/user/source/git/arbitrum-tutorials/packages/eth-deposit/scripts/exec.js:36:21) { inner: undefined }
it seems the arbitrum-sdk only support hardcode network?
This is the pet adoption/pet shop example contract.
Even though the contract is posted to rinkarby test network successfully https://rinkeby-explorer.arbitrum.io/tx/0x5481aa88b563b9ba7a89563ddddf9ec0958424cfc98e5bf2eb1e02e17420e3c8
and the code uses await it errors like it cannot find the smart contract.
Here's the code output:
Deploying Adoption contract to L2
Adoption contract is deployed to 0x11BeAEC17Dd16785A58D9D5B568F16c5B4f7D036
Expected Adopter 0x00CEd389144183D12794aD5985D48e3D7DF02077
Adopting pet:
AdoptionEventData: {
hash: '0x5481aa88b563b9ba7a89563ddddf9ec0958424cfc98e5bf2eb1e02e17420e3c8',
type: 0,
accessList: null,
blockHash: '0x6f824c783917e18d73135ab5d9b2268a64c034e21d9608593bbbe1d3348c7abe',
blockNumber: 7724314,
transactionIndex: 0,
confirmations: 1,
from: '0x00CEd389144183D12794aD5985D48e3D7DF02077',
gasPrice: BigNumber { value: "14619612" },
gasLimit: BigNumber { value: "750498" },
to: '0x11BeAEC17Dd16785A58D9D5B568F16c5B4f7D036',
value: BigNumber { value: "0" },
nonce: 13,
data: '0x8588b2c50000000000000000000000000000000000000000000000000000000000000008',
r: '0x7eefa75b150759643a3b11f78ef599e3433e630d8156106b5a1ebce6c859fba5',
s: '0x3c764794e85e26dc8f3e78acd5185948cb1ee49727e93c02cbcdb350439667bb',
v: 843258,
creates: null,
chainId: 421611,
wait: [Function (anonymous)]
}
Error: call revert exception (method="adopters(uint256)", errorArgs=null, errorName=null, errorSignature=null, reason=null, code=CALL_EXCEPTION, version=abi/5.5.0)
at Logger.makeError (C:\Users\a\Documents\Code\Arbitrum Test\arbitrum-tutorials\packages\demo-dapp-pet-shop\node_modules\@ethersproject\logger\src.ts\index.ts:225:28)
at Logger.throwError (C:\Users\a\Documents\Code\Arbitrum Test\arbitrum-tutorials\packages\demo-dapp-pet-shop\node_modules\@ethersproject\logger\src.ts\index.ts:237:20)
at Interface.decodeFunctionResult (C:\Users\a\Documents\Code\Arbitrum Test\arbitrum-tutorials\packages\demo-dapp-pet-shop\node_modules\@ethersproject\abi\src.ts\interface.ts:425:23)
at Contract.<anonymous> (C:\Users\a\Documents\Code\Arbitrum Test\arbitrum-tutorials\packages\demo-dapp-pet-shop\node_modules\@ethersproject\contracts\src.ts\index.ts:392:44)
o-dapp-pet-shop\node_modules\@ethersproject\contracts\lib\index.js:48:23)
at Object.next (C:\Users\a\Documents\Code\Arbitrum Test\arbitrum-tutorials\packages\demo-dapp-pet-shop\node_modules\@ethersproject\contracts\lib\index.js:29:53)
at fulfilled (C:\Users\a\Documents\Code\Arbitrum Test\arbitrum-tutorials\packages\demo-dapp-pet-shop\node_modules\@ethersproject\contracts\lib\index.js:20:58)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
reason: null,
code: 'CALL_EXCEPTION',
method: 'adopters(uint256)',
errorArgs: null,
errorName: null,
errorSignature: null,
address: '0x11BeAEC17Dd16785A58D9D5B568F16c5B4f7D036',
args: [ 8 ],
transaction: {
data: '0x43ae80d30000000000000000000000000000000000000000000000000000000000000008',
to: '0x11BeAEC17Dd16785A58D9D5B568F16c5B4f7D036',
from: '0x00CEd389144183D12794aD5985D48e3D7DF02077'
}
}
Running either of the simple demos (using yarn run exec), results in:
TypeError: Only absolute URLs are supported
According to official documents, arbitrum started to support goerli test network, and I think arbitrum-sdk has a new branch recently, so I used this example when I pulled the version of the new branch and found an error. When will you be able to improve? If possible, we thank you very much.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.