Proposal to add OCT as a new ckERC20 token

Hello, community!

Attached is the new proposal to add ckOCT, which we are preparing to resubmit.
Please review and provide your comments.

Compared to the rejected proposal, the following modifications have been made:

  1. The git_commit_hash parameter in the upgrade args has been modified to be consistent with the ckLINK proposal.
  2. Added some explanations from Manu about verifying the ledger and index wasm in the verification section.

We hope to receive feedback from the CodeGov team and the community. If there are no objections to this draft, I plan to formally submit it on Friday evening.

— Proposal to be submitted —

Proposal to upgrade the ckERC20 ledger suite orchestrator canister to add ckOCT

Git hash: 7fbb84aad7188d1d5b3e17b170997c29d1598cb8

New compressed Wasm hash: 9bd512661aba6bd7895d09685f625beca014304b7c1e073e029794d601a86709

Target canister: vxkom-oyaaa-aaaar-qafda-cai

Previous ledger suite orchestrator proposal: https://dashboard.internetcomputer.org/proposal/130395


Motivation

This proposal upgrades the ckERC20 ledger suite orchestrator to support the OCT token. OCT, an ERC20 token, serves as the utility and governance token for the Octopus Network, now rebranded as Omnity Network. Since Omnity Network is an ICP ecosystem project, migrating the trading liquidity of OCT to ICP from other blockchains makes sense. Moreover, the Omnity core team plans to launch the Omnity SNS token later this year. After that, ckOCT tokens are eligible to be swapped into Omnity tokens.

Upgrade args


git fetch

git checkout 7fbb84aad7188d1d5b3e17b170997c29d1598cb8

cd rs/ethereum/ledger-suite-orchestrator

didc encode -d ledger_suite_orchestrator.did -t '(OrchestratorArg)' '(variant { AddErc20Arg = record { contract = record { chain_id = 1; address = "0xF5cFBC74057C610c8EF151A439252680AC68c6DC" }; ledger_init_arg = record { minting_account = record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai" }; fee_collector_account = opt record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai"; subaccount = opt blob "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0f\ee"; }; feature_flags = opt record { icrc2 = true }; decimals = opt 18; max_memo_length = opt 80; transfer_fee = 10_000_000_000_000_000; token_symbol = "ckOCT"; token_name = "ckOCT"; token_logo = "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdPJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDExMy4zOSAxMTMuMzknIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDExMy4zOSAxMTMuMzk7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJz48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiAuc3Qwe2ZpbGw6IzAxNDI5OTt9IC5zdDF7ZmlsbDojRkZGRkZGO30gPC9zdHlsZT48Y2lyY2xlIGNsYXNzPSdzdDAnIGN4PSc1Ni42OScgY3k9JzU2LjY5JyByPSc1Ni42OScvPjxnPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J000NC4yNSw1OS40MWMtMS40MywwLTIuNTksMS4xNi0yLjU5LDIuNTl2MjAuMjhjMCwxLjQzLDEuMTYsMi41OSwyLjU5LDIuNTljMS40MywwLDIuNTktMS4xNiwyLjU5LTIuNTlWNjIgQzQ2Ljg0LDYwLjU3LDQ1LjY4LDU5LjQxLDQ0LjI1LDU5LjQxeicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J001Ni42OSw1OS40MWMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MjYuNDdjMCwxLjQ1LDEuMTcsMi42MiwyLjYyLDIuNjJzMi42Mi0xLjE3LDIuNjItMi42MlY2Mi4wMiBDNTkuMzEsNjAuNTgsNTguMTQsNTkuNDEsNTYuNjksNTkuNDF6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTc5LjI2LDc4Ljg3Yy0wLjMzLDAuMTUtMC42NCwwLjI4LTAuOTUsMC4zOGMwLDAtMC4wMSwwLTAuMDEsMGMtMC41OSwwLjE5LTEuMTMsMC4yOS0xLjYzLDAuMzFoLTAuMDYgYy0xLDAuMDMtMS44NC0wLjI3LTIuNTktMC43NWMtMC40OS0wLjMyLTAuOTEtMC43My0xLjI1LTEuMjNjLTAuMy0wLjQzLTAuNTMtMC45My0wLjcxLTEuNTFjMC0wLjAxLTAuMDEtMC4wMi0wLjAxLTAuMDMgYy0wLjIyLTAuNzQtMC4zNC0xLjYxLTAuMzQtMi41OVY2Mi4wMmMwLTEuNDUtMS4xNy0yLjYyLTIuNjItMi42MmMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MTEuNDNjMCw0LjUsMS42NCw4LjAzLDQuNjMsOS45NiBjMS41LDAuOTcsMy4yMSwxLjQ1LDUuMDQsMS40NWMxLjY4LDAsMy40NS0wLjQxLDUuMjUtMS4yMmMxLjMyLTAuNTksMS45LTIuMTQsMS4zMS0zLjQ2QzgyLjEzLDc4Ljg2LDgwLjU3LDc4LjI3LDc5LjI2LDc4Ljg3eicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J002OC4zMyw0NS45YzAtMi4xNS0xLjc1LTMuOS0zLjktMy45Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45IEM2Ni41OCw0OS44LDY4LjMzLDQ4LjA1LDY4LjMzLDQ1Ljl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTQ4Ljk2LDQxLjk5Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45czMuOS0xLjc1LDMuOS0zLjlTNTEuMTEsNDEuOTksNDguOTYsNDEuOTl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTU2LjY5LDIyLjI4Yy0xNS4xNywwLTI3LjUyLDEyLjM0LTI3LjUyLDI3LjUydjE1LjA5YzAsMS40NiwxLjE4LDIuNjQsMi42NCwyLjY0czIuNjQtMS4xOCwyLjY0LTIuNjRWNDkuOCBjMC0xMi4yNiw5Ljk4LTIyLjI0LDIyLjI0LTIyLjI0YzEyLjI2LDAsMjIuMjQsOS45OCwyMi4yNCwyMi4yNHYxNS4wOWMwLDEuNDYsMS4xOCwyLjY0LDIuNjQsMi42NHMyLjY0LTEuMTgsMi42NC0yLjY0VjQ5LjggQzg0LjIxLDM0LjYyLDcxLjg3LDIyLjI4LDU2LjY5LDIyLjI4eicvPjwvZz48L3N2Zz4K"; initial_balances = vec {}; maximum_number_of_accounts = null; accounts_overflow_trim_quantity = null }; git_commit_hash = "7fbb84aad7188d1d5b3e17b170997c29d1598cb8"; ledger_compressed_wasm_hash = "4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679"; index_compressed_wasm_hash = "55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33"; }})'

  • 0xF5cFBC74057C610c8EF151A439252680AC68c6DC is the address of the OCT smart contract on Ethereum Mainnet which can be verified on Etherscan.

  • sv3dd-oaaaa-aaaar-qacoa-cai is the ckETH minter canister.

  • The fee collector is the 0000000000000000000000000000000000000000000000000000000000000fee subaccount of the minter canister.

  • The transfer fee is 10_000_000_000_000_000, which is equivalent to 0.01 OCT. Based on the moving average over the past year, this amounts to approximately 0.003 USD.

  • The ledger compressed wasm hash 4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679 and the index compressed wasm hash 55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33 are the version that will be used by the orchestrator to spawn off the ckOCT ledger and index, respectively.

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.


git fetch

git checkout 7fbb84aad7188d1d5b3e17b170997c29d1598cb8

./gitlab-ci/container/build-ic.sh -c

sha256sum ./artifacts/canisters/ic-ledger-suite-orchestrator-canister.wasm.gz

Verify that the hash of the gzipped WASM for the ledger and index matches the proposed hash. Note that the git commit hash is different because it reuses the same version for the ledger and the index as for ckUSDC, which were recorded by the ledger suite orchestrator with the proposal 129750 at commit 4472b0064d347a88649beb526214fde204f906fb when ckUSDC was added.


git fetch

git checkout 4472b0064d347a88649beb526214fde204f906fb

./gitlab-ci/container/build-ic.sh -c

sha256sum ./artifacts/canisters/ic-icrc1-ledger-u256.wasm.gz

sha256sum ./artifacts/canisters/ic-icrc1-index-ng-u256.wasm.gz

4 Likes

Thanks Julian,

Almost all look good. Only have one last reservation, the transfer fee.

You claim it’s worth 0.003$, but the current price of OCT has decreased from last months high, and is currently trading at 0.15$. That would put the fee at 0.0015$, this could be a problem, as we don’t want maintenance costs of the canister to be under any form of risk.

As a comparison at today’s prices:

  • ckBTC, 0.0000001 ~0.0065 USD
  • ckETH, 0.000002 ~0.0070 USD
  • ckUSDT, 0.010 ~0.0100 USD
  • ckLINK, ? ~0.0015 USD (!)

All of the fees I was able to cross / confirm, but ckLink wasn’t able to, my source is just the description. Could it be a typo / fat finger on the amount of zeros? It does seem that already ckLINK proposal was wrong. @Manu can you kindly confirm this?

I suspect both ckLINK and this draft are at less than desired fees (~5x to 10x less than desired).

Thanks,
Tiago

4 Likes

Hi tiago89,

Good catch!

I have read that the guidance range for the transfer fee should be $0.005~$0.01. This value is very easy to determine for stablecoins, but for other tokens, we need to eliminate short-term price fluctuations. Therefore, I used the average price over the past year as the baseline value. Additionally, our team believes that the price of OCT is undervalued, so we manually adjusted it by approximately 60% to get the final value.

We believe that the cycle consumption of the ledger is very low, and the main purpose of the transfer fee is to prevent dusting attacks. Moreover, we do not want the OCT price, when it returns to our expected price (although this is very subjective), to result in users incurring a lot of fees for each transfer. This would reduce users’ willingness to make transfers.

I am personally open to adjusting this value and look forward to hearing everyone’s opinions.

2 Likes

I will wait for a conclusion from the above discussion before submitting the proposal.

Regarding the issue of the ckOCT ledger transfer fee, I have thought of another solution. I am confident that I can convince the Omnity team to deposit a large amount of cycles into the ledger to cover the cycles consumption for a long period of time in the future, so setting the transfer fee slightly lower will not be a problem in this case.

However, it seems that it would be better if this value were adjustable, although it would add some burden to governance.

Hi Julian,

Thanks for the effort, I would prefer to wait for a bit more on Manu to reply. I have sent him a message on slack.

I would suspect that if the standard is a minimum of 0.005$, it would be hard for us to approve it. Or else all other coins would request for lower and lower transfer fees.

One of the issues mentioned in the Readme is to dissuade any DoS attack, if the fee is too small, it’s cheaper for an attacker to release so many self transfer (~10k a second) that it would slow / stop others from being able to transfer.

If the transfer fee was 40_ instead of 10_ that would put the cost at around 0.006. I know its much better than ETH, but not so sure how much better compared to L2s. Would this transfer fee still be interesting enough for the bridge? Or you feel it’s too close to other L2s?

Thanks for the feedback.

2 Likes

If the token price stays the same, $0.005 is a very reasonable fee, similar to Base and Arbitrum One. If the token price doubles, the fee would be $0.01. From a fee-only perspective, this would make transfers on ICP less competitive (based on my quick look at L2beat).

2 Likes

Hey folks, some heads up from DFINITY.

We discussed internally and we see the range of 0.5-1.5 cents as being both aligned with any technical concerns and UX-wise. Hence, we would support any fee within this range.

Also please note, the fee can be changed at any point in time later via an additional proposal (e.g. if the token price goes up so much that transfers will be considered as too expensive).

7 Likes

Thank you for your response.

Compared to the previous draft, I made the following changes:

1.	Increased the transfer fee from 10_000_000_000_000_000 to 34_000_000_000_000_000, which is approximately $0.005 at the current price.
2.	Updated the previous proposal to https://dashboard.internetcomputer.org/proposal/130755 (ckPEPE).
3.	Explained the hashes in the same way as the ckPEPE proposal.

Please review again.
@Manu @tiago89 FYI

diff --git a/orchestrator_add_ckoct_summary.md b/orchestrator_add_ckoct_summary.md
index 7d0aa69..54c3bb7 100644
--- a/orchestrator_add_ckoct_summary.md
+++ b/orchestrator_add_ckoct_summary.md
@@ -6,7 +6,7 @@ New compressed Wasm hash: `9bd512661aba6bd7895d09685f625beca014304b7c1e073e02979
 
 Target canister: `vxkom-oyaaa-aaaar-qafda-cai`
 
-Previous ledger suite orchestrator proposal: https://dashboard.internetcomputer.org/proposal/130395
+Previous ledger suite orchestrator proposal: https://dashboard.internetcomputer.org/proposal/130755
 
 ---
 
@@ -20,15 +20,19 @@ This proposal upgrades the ckERC20 ledger suite orchestrator to support the [OCT
 git fetch
 git checkout 7fbb84aad7188d1d5b3e17b170997c29d1598cb8
 cd rs/ethereum/ledger-suite-orchestrator
-didc encode -d ledger_suite_orchestrator.did -t '(OrchestratorArg)' '(variant { AddErc20Arg = record { contract = record { chain_id = 1; address = "0xF5cFBC74057C610c8EF151A439252680AC68c6DC" }; ledger_init_arg = record { minting_account = record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai" }; fee_collector_account = opt record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai"; subaccount = opt blob "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0f\ee"; }; feature_flags  = opt record { icrc2 = true }; decimals = opt 18; max_memo_length = opt 80; transfer_fee = 10_000_000_000_000_000; token_symbol = "ckOCT"; token_name = "ckOCT"; token_logo = "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdPJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDExMy4zOSAxMTMuMzknIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDExMy4zOSAxMTMuMzk7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJz48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiAuc3Qwe2ZpbGw6IzAxNDI5OTt9IC5zdDF7ZmlsbDojRkZGRkZGO30gPC9zdHlsZT48Y2lyY2xlIGNsYXNzPSdzdDAnIGN4PSc1Ni42OScgY3k9JzU2LjY5JyByPSc1Ni42OScvPjxnPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J000NC4yNSw1OS40MWMtMS40MywwLTIuNTksMS4xNi0yLjU5LDIuNTl2MjAuMjhjMCwxLjQzLDEuMTYsMi41OSwyLjU5LDIuNTljMS40MywwLDIuNTktMS4xNiwyLjU5LTIuNTlWNjIgQzQ2Ljg0LDYwLjU3LDQ1LjY4LDU5LjQxLDQ0LjI1LDU5LjQxeicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J001Ni42OSw1OS40MWMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MjYuNDdjMCwxLjQ1LDEuMTcsMi42MiwyLjYyLDIuNjJzMi42Mi0xLjE3LDIuNjItMi42MlY2Mi4wMiBDNTkuMzEsNjAuNTgsNTguMTQsNTkuNDEsNTYuNjksNTkuNDF6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTc5LjI2LDc4Ljg3Yy0wLjMzLDAuMTUtMC42NCwwLjI4LTAuOTUsMC4zOGMwLDAtMC4wMSwwLTAuMDEsMGMtMC41OSwwLjE5LTEuMTMsMC4yOS0xLjYzLDAuMzFoLTAuMDYgYy0xLDAuMDMtMS44NC0wLjI3LTIuNTktMC43NWMtMC40OS0wLjMyLTAuOTEtMC43My0xLjI1LTEuMjNjLTAuMy0wLjQzLTAuNTMtMC45My0wLjcxLTEuNTFjMC0wLjAxLTAuMDEtMC4wMi0wLjAxLTAuMDMgYy0wLjIyLTAuNzQtMC4zNC0xLjYxLTAuMzQtMi41OVY2Mi4wMmMwLTEuNDUtMS4xNy0yLjYyLTIuNjItMi42MmMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MTEuNDNjMCw0LjUsMS42NCw4LjAzLDQuNjMsOS45NiBjMS41LDAuOTcsMy4yMSwxLjQ1LDUuMDQsMS40NWMxLjY4LDAsMy40NS0wLjQxLDUuMjUtMS4yMmMxLjMyLTAuNTksMS45LTIuMTQsMS4zMS0zLjQ2QzgyLjEzLDc4Ljg2LDgwLjU3LDc4LjI3LDc5LjI2LDc4Ljg3eicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J002OC4zMyw0NS45YzAtMi4xNS0xLjc1LTMuOS0zLjktMy45Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45IEM2Ni41OCw0OS44LDY4LjMzLDQ4LjA1LDY4LjMzLDQ1Ljl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTQ4Ljk2LDQxLjk5Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45czMuOS0xLjc1LDMuOS0zLjlTNTEuMTEsNDEuOTksNDguOTYsNDEuOTl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTU2LjY5LDIyLjI4Yy0xNS4xNywwLTI3LjUyLDEyLjM0LTI3LjUyLDI3LjUydjE1LjA5YzAsMS40NiwxLjE4LDIuNjQsMi42NCwyLjY0czIuNjQtMS4xOCwyLjY0LTIuNjRWNDkuOCBjMC0xMi4yNiw5Ljk4LTIyLjI0LDIyLjI0LTIyLjI0YzEyLjI2LDAsMjIuMjQsOS45OCwyMi4yNCwyMi4yNHYxNS4wOWMwLDEuNDYsMS4xOCwyLjY0LDIuNjQsMi42NHMyLjY0LTEuMTgsMi42NC0yLjY0VjQ5LjggQzg0LjIxLDM0LjYyLDcxLjg3LDIyLjI4LDU2LjY5LDIyLjI4eicvPjwvZz48L3N2Zz4K"; initial_balances = vec {}; maximum_number_of_accounts = null; accounts_overflow_trim_quantity = null }; git_commit_hash = "7fbb84aad7188d1d5b3e17b170997c29d1598cb8";  ledger_compressed_wasm_hash = "4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679"; index_compressed_wasm_hash = "55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33"; }})'
+didc encode -d ledger_suite_orchestrator.did -t '(OrchestratorArg)' '(variant { AddErc20Arg = record { contract = record { chain_id = 1; address = "0xF5cFBC74057C610c8EF151A439252680AC68c6DC" }; ledger_init_arg = record { minting_account = record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai" }; fee_collector_account = opt record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai"; subaccount = opt blob "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0f\ee"; }; feature_flags  = opt record { icrc2 = true }; decimals = opt 18; max_memo_length = opt 80; transfer_fee = 34_000_000_000_000_000; token_symbol = "ckOCT"; token_name = "ckOCT"; token_logo = "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdPJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDExMy4zOSAxMTMuMzknIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDExMy4zOSAxMTMuMzk7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJz48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiAuc3Qwe2ZpbGw6IzAxNDI5OTt9IC5zdDF7ZmlsbDojRkZGRkZGO30gPC9zdHlsZT48Y2lyY2xlIGNsYXNzPSdzdDAnIGN4PSc1Ni42OScgY3k9JzU2LjY5JyByPSc1Ni42OScvPjxnPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J000NC4yNSw1OS40MWMtMS40MywwLTIuNTksMS4xNi0yLjU5LDIuNTl2MjAuMjhjMCwxLjQzLDEuMTYsMi41OSwyLjU5LDIuNTljMS40MywwLDIuNTktMS4xNiwyLjU5LTIuNTlWNjIgQzQ2Ljg0LDYwLjU3LDQ1LjY4LDU5LjQxLDQ0LjI1LDU5LjQxeicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J001Ni42OSw1OS40MWMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MjYuNDdjMCwxLjQ1LDEuMTcsMi42MiwyLjYyLDIuNjJzMi42Mi0xLjE3LDIuNjItMi42MlY2Mi4wMiBDNTkuMzEsNjAuNTgsNTguMTQsNTkuNDEsNTYuNjksNTkuNDF6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTc5LjI2LDc4Ljg3Yy0wLjMzLDAuMTUtMC42NCwwLjI4LTAuOTUsMC4zOGMwLDAtMC4wMSwwLTAuMDEsMGMtMC41OSwwLjE5LTEuMTMsMC4yOS0xLjYzLDAuMzFoLTAuMDYgYy0xLDAuMDMtMS44NC0wLjI3LTIuNTktMC43NWMtMC40OS0wLjMyLTAuOTEtMC43My0xLjI1LTEuMjNjLTAuMy0wLjQzLTAuNTMtMC45My0wLjcxLTEuNTFjMC0wLjAxLTAuMDEtMC4wMi0wLjAxLTAuMDMgYy0wLjIyLTAuNzQtMC4zNC0xLjYxLTAuMzQtMi41OVY2Mi4wMmMwLTEuNDUtMS4xNy0yLjYyLTIuNjItMi42MmMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MTEuNDNjMCw0LjUsMS42NCw4LjAzLDQuNjMsOS45NiBjMS41LDAuOTcsMy4yMSwxLjQ1LDUuMDQsMS40NWMxLjY4LDAsMy40NS0wLjQxLDUuMjUtMS4yMmMxLjMyLTAuNTksMS45LTIuMTQsMS4zMS0zLjQ2QzgyLjEzLDc4Ljg2LDgwLjU3LDc4LjI3LDc5LjI2LDc4Ljg3eicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J002OC4zMyw0NS45YzAtMi4xNS0xLjc1LTMuOS0zLjktMy45Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45IEM2Ni41OCw0OS44LDY4LjMzLDQ4LjA1LDY4LjMzLDQ1Ljl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTQ4Ljk2LDQxLjk5Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45czMuOS0xLjc1LDMuOS0zLjlTNTEuMTEsNDEuOTksNDguOTYsNDEuOTl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTU2LjY5LDIyLjI4Yy0xNS4xNywwLTI3LjUyLDEyLjM0LTI3LjUyLDI3LjUydjE1LjA5YzAsMS40NiwxLjE4LDIuNjQsMi42NCwyLjY0czIuNjQtMS4xOCwyLjY0LTIuNjRWNDkuOCBjMC0xMi4yNiw5Ljk4LTIyLjI0LDIyLjI0LTIyLjI0YzEyLjI2LDAsMjIuMjQsOS45OCwyMi4yNCwyMi4yNHYxNS4wOWMwLDEuNDYsMS4xOCwyLjY0LDIuNjQsMi42NHMyLjY0LTEuMTgsMi42NC0yLjY0VjQ5LjggQzg0LjIxLDM0LjYyLDcxLjg3LDIyLjI4LDU2LjY5LDIyLjI4eicvPjwvZz48L3N2Zz4K"; initial_balances = vec {}; maximum_number_of_accounts = null; accounts_overflow_trim_quantity = null }; git_commit_hash = "7fbb84aad7188d1d5b3e17b170997c29d1598cb8";  ledger_compressed_wasm_hash = "4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679"; index_compressed_wasm_hash = "55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33"; }})'

 * 0xF5cFBC74057C610c8EF151A439252680AC68c6DC is the address of the OCT smart contract on Ethereum Mainnet which can be verified on [Etherscan](https://etherscan.io/token/0xf5cfbc74057c610c8ef151a439252680ac68c6dc#code).
 * sv3dd-oaaaa-aaaar-qacoa-cai is the ckETH minter canister.
 * The fee collector is the 0000000000000000000000000000000000000000000000000000000000000fee subaccount of the minter canister.
-* The transfer fee is 10_000_000_000_000_000, which is equivalent to 0.01 OCT. Based on the moving average over the past year, this amounts to approximately 0.003 USD.
-* The ledger compressed wasm hash 4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679 and the index compressed wasm hash 55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33 are the version that will be used by the orchestrator to spawn off the ckOCT ledger and index, respectively.
+* The transfer fee is 34_000_000_000_000_000, corresponding approximately to 0.005 USD at the time of submitting the proposal.
+* The ledger compressed wasm hash 4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679 and the index compressed wasm hash 55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33 are the version that will be used by the orchestrator to spawn off the ckOCT ledger and index, respectively. This is exactly the same version as used by the ckUSDC ledger and index that were created with the proposal [129750](https://dashboard.internetcomputer.org/proposal/129750) at commit 4472b0064d347a88649beb526214fde204f906fb.
 
 
+## Release Notes
+
+No changes to the ckERC20 ledger suite orchestrator canister codebase, since this proposal uses the same version 7fbb84aad7188d1d5b3e17b170997c29d1598cb8 as the previous proposal ([130755](https://dashboard.internetcomputer.org/proposal/130755)).
+
 ## Wasm Verification
 
 
@@ -41,7 +45,7 @@ git checkout 7fbb84aad7188d1d5b3e17b170997c29d1598cb8
 sha256sum ./artifacts/canisters/ic-ledger-suite-orchestrator-canister.wasm.gz

 
-Verify that the hash of the gzipped WASM for the ledger and index matches the proposed hash. Note that the git commit hash is different because it reuses the same version for the ledger and the index as for ckUSDC, which were recorded by the ledger suite orchestrator with the proposal 129750 at commit 4472b0064d347a88649beb526214fde204f906fb when ckUSDC was added.
+Verify that the hash of the gzipped WASM for the ledger and index match the proposed hash.
 
4 Likes

Hi @juliansun

Could you please provide the updated full proposal? Applying a patch file to a previous forum post, which is not the exact original file (a/orchestrator_add_ckoct_summary.md in your diff), would require some manual work.

Hi @gregory-demay

Sorry, I thought using a patch would make it easier to compare.

Here is the full proposal:
It seems that everyone has no objections regarding the transfer fee issue. I plan to submit the proposal in 12 hours.

— Proposal to be submitted —

Proposal to upgrade the ckERC20 ledger suite orchestrator canister to add ckOCT

Git hash: 7fbb84aad7188d1d5b3e17b170997c29d1598cb8

New compressed Wasm hash: 9bd512661aba6bd7895d09685f625beca014304b7c1e073e029794d601a86709

Target canister: vxkom-oyaaa-aaaar-qafda-cai

Previous ledger suite orchestrator proposal: https://dashboard.internetcomputer.org/proposal/130755


Motivation

This proposal upgrades the ckERC20 ledger suite orchestrator to support the OCT token. OCT, an ERC20 token, serves as the utility and governance token for the Octopus Network, now rebranded as Omnity Network. Since Omnity Network is an ICP ecosystem project, migrating the trading liquidity of OCT to ICP from other blockchains makes sense. Moreover, the Omnity core team plans to launch the Omnity SNS token later this year. After that, ckOCT tokens are eligible to be swapped into Omnity tokens.

Upgrade args


git fetch

git checkout 7fbb84aad7188d1d5b3e17b170997c29d1598cb8

cd rs/ethereum/ledger-suite-orchestrator

didc encode -d ledger_suite_orchestrator.did -t '(OrchestratorArg)' '(variant { AddErc20Arg = record { contract = record { chain_id = 1; address = "0xF5cFBC74057C610c8EF151A439252680AC68c6DC" }; ledger_init_arg = record { minting_account = record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai" }; fee_collector_account = opt record { owner = principal "sv3dd-oaaaa-aaaar-qacoa-cai"; subaccount = opt blob "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0f\ee"; }; feature_flags = opt record { icrc2 = true }; decimals = opt 18; max_memo_length = opt 80; transfer_fee = 34_000_000_000_000_000; token_symbol = "ckOCT"; token_name = "ckOCT"; token_logo = "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdPJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDExMy4zOSAxMTMuMzknIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDExMy4zOSAxMTMuMzk7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJz48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiAuc3Qwe2ZpbGw6IzAxNDI5OTt9IC5zdDF7ZmlsbDojRkZGRkZGO30gPC9zdHlsZT48Y2lyY2xlIGNsYXNzPSdzdDAnIGN4PSc1Ni42OScgY3k9JzU2LjY5JyByPSc1Ni42OScvPjxnPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J000NC4yNSw1OS40MWMtMS40MywwLTIuNTksMS4xNi0yLjU5LDIuNTl2MjAuMjhjMCwxLjQzLDEuMTYsMi41OSwyLjU5LDIuNTljMS40MywwLDIuNTktMS4xNiwyLjU5LTIuNTlWNjIgQzQ2Ljg0LDYwLjU3LDQ1LjY4LDU5LjQxLDQ0LjI1LDU5LjQxeicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J001Ni42OSw1OS40MWMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MjYuNDdjMCwxLjQ1LDEuMTcsMi42MiwyLjYyLDIuNjJzMi42Mi0xLjE3LDIuNjItMi42MlY2Mi4wMiBDNTkuMzEsNjAuNTgsNTguMTQsNTkuNDEsNTYuNjksNTkuNDF6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTc5LjI2LDc4Ljg3Yy0wLjMzLDAuMTUtMC42NCwwLjI4LTAuOTUsMC4zOGMwLDAtMC4wMSwwLTAuMDEsMGMtMC41OSwwLjE5LTEuMTMsMC4yOS0xLjYzLDAuMzFoLTAuMDYgYy0xLDAuMDMtMS44NC0wLjI3LTIuNTktMC43NWMtMC40OS0wLjMyLTAuOTEtMC43My0xLjI1LTEuMjNjLTAuMy0wLjQzLTAuNTMtMC45My0wLjcxLTEuNTFjMC0wLjAxLTAuMDEtMC4wMi0wLjAxLTAuMDMgYy0wLjIyLTAuNzQtMC4zNC0xLjYxLTAuMzQtMi41OVY2Mi4wMmMwLTEuNDUtMS4xNy0yLjYyLTIuNjItMi42MmMtMS40NSwwLTIuNjIsMS4xNy0yLjYyLDIuNjJ2MTEuNDNjMCw0LjUsMS42NCw4LjAzLDQuNjMsOS45NiBjMS41LDAuOTcsMy4yMSwxLjQ1LDUuMDQsMS40NWMxLjY4LDAsMy40NS0wLjQxLDUuMjUtMS4yMmMxLjMyLTAuNTksMS45LTIuMTQsMS4zMS0zLjQ2QzgyLjEzLDc4Ljg2LDgwLjU3LDc4LjI3LDc5LjI2LDc4Ljg3eicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J002OC4zMyw0NS45YzAtMi4xNS0xLjc1LTMuOS0zLjktMy45Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45IEM2Ni41OCw0OS44LDY4LjMzLDQ4LjA1LDY4LjMzLDQ1Ljl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTQ4Ljk2LDQxLjk5Yy0yLjE1LDAtMy45LDEuNzUtMy45LDMuOXMxLjc1LDMuOSwzLjksMy45czMuOS0xLjc1LDMuOS0zLjlTNTEuMTEsNDEuOTksNDguOTYsNDEuOTl6Jy8+PHBhdGggY2xhc3M9J3N0MScgZD0nTTU2LjY5LDIyLjI4Yy0xNS4xNywwLTI3LjUyLDEyLjM0LTI3LjUyLDI3LjUydjE1LjA5YzAsMS40NiwxLjE4LDIuNjQsMi42NCwyLjY0czIuNjQtMS4xOCwyLjY0LTIuNjRWNDkuOCBjMC0xMi4yNiw5Ljk4LTIyLjI0LDIyLjI0LTIyLjI0YzEyLjI2LDAsMjIuMjQsOS45OCwyMi4yNCwyMi4yNHYxNS4wOWMwLDEuNDYsMS4xOCwyLjY0LDIuNjQsMi42NHMyLjY0LTEuMTgsMi42NC0yLjY0VjQ5LjggQzg0LjIxLDM0LjYyLDcxLjg3LDIyLjI4LDU2LjY5LDIyLjI4eicvPjwvZz48L3N2Zz4K"; initial_balances = vec {}; maximum_number_of_accounts = null; accounts_overflow_trim_quantity = null }; git_commit_hash = "7fbb84aad7188d1d5b3e17b170997c29d1598cb8"; ledger_compressed_wasm_hash = "4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679"; index_compressed_wasm_hash = "55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33"; }})'

  • 0xF5cFBC74057C610c8EF151A439252680AC68c6DC is the address of the OCT smart contract on Ethereum Mainnet which can be verified on Etherscan.

  • sv3dd-oaaaa-aaaar-qacoa-cai is the ckETH minter canister.

  • The fee collector is the 0000000000000000000000000000000000000000000000000000000000000fee subaccount of the minter canister.

  • The transfer fee is 34_000_000_000_000_000, corresponding approximately to 0.005 USD at the time of submitting the proposal.

  • The ledger compressed wasm hash 4ca82938d223c77909dcf594a49ea72c07fd513726cfa7a367dd0be0d6abc679 and the index compressed wasm hash 55dd5ea22b65adf877cea893765561ae290b52e7fdfdc043b5c18ffbaaa78f33 are the version that will be used by the orchestrator to spawn off the ckOCT ledger and index, respectively. This is exactly the same version as used by the ckUSDC ledger and index that were created with the proposal 129750 at commit 4472b0064d347a88649beb526214fde204f906fb.

Release Notes

No changes to the ckERC20 ledger suite orchestrator canister codebase, since this proposal uses the same version 7fbb84aad7188d1d5b3e17b170997c29d1598cb8 as the previous proposal (130755).

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.


git fetch

git checkout 7fbb84aad7188d1d5b3e17b170997c29d1598cb8

./gitlab-ci/container/build-ic.sh -c

sha256sum ./artifacts/canisters/ic-ledger-suite-orchestrator-canister.wasm.gz

Verify that the hash of the gzipped WASM for the ledger and index match the proposed hash.


git fetch

git checkout 4472b0064d347a88649beb526214fde204f906fb

./gitlab-ci/container/build-ic.sh -c

sha256sum ./artifacts/canisters/ic-icrc1-ledger-u256.wasm.gz

sha256sum ./artifacts/canisters/ic-icrc1-index-ng-u256.wasm.gz

1 Like

Thanks @juliansun for providing the full proposal!

The proposal looks correct to me! Good luck with the submission!

3 Likes

It’s nice to see the range opened up a little, especially for tokens that are not intended to be stable coins. Is there any guidance on whether this fee should be set based on current price or historical price (e.g. 1 month, 3 month, or 6 month daily average)?

Is there any guidance on who should submit the proposal to reset the fee if token price swings? Are there any threshold values that should trigger concerns that the fee will a too far outside the desired range? Is there anyone who should be expected to monitor the fee to make sure it is within the preferred range?

I’m just trying to better understand the importance of this fee range and how it should be managed beyond the initial proposal.

Thanks @christian and @Manu for your input on this topic.

3 Likes

I have resubmitted the proposal, please support us.

I also want to know the answer to the questions raised by wpb. It seems that we will definitely need to make a fee adjustment within a few months.

6 Likes

I looked into this question a bit further. From my understanding of the process around ckERC20 tokens (gleaned mainly from here and here), no new code as such is created by a new token proposal, but rather a new wasm module is created based on the parameters shown within the proposal, which need to follow very specific guidelines as outlined in the first of those two links. The only one with any significant discretion allowed appears to be transfer_fee, which has been discussed at length above. Nonetheless, the parameters all need checking for compliance.

As far as attacks that could be coded within a smart contract on the Ethereum chain (or other EVM-based chain), the honeypot - whereby selling the token is made exceedingly difficult - and the internal fee scam - in which unusually high transfer fees are coded in - came up as frequently mentioned examples. Outside of the actual coding, liquidity scams - whereby the coin-creator is able to pull liquidity from a pool in bulk - and fake stablecoins are further examples. Various other vulnerabilities can result from unintended shortcomings in the smart contract code.

Given that the functionality of ckERC20 tokens on the IC appears to be limited to transfers in, out and internally, these attack types would not be part of the wasm code, but it certainly behoves us to verify the integrity of the original token through standard due diligence.

Note that this is just my own understanding based on seeking out a handful of sources, and others here would be much more well-versed in smart contract security than I am, so do let me know if I seem to be on track with this or if I’m missing something significant.

2 Likes

The proposal was executed! We now have ckOCT: https://dashboard.internetcomputer.org/ethereum/ebo5g-cyaaa-aaaar-qagla-cai.

Great job driving this proposal @juliansun @toliuyi

3 Likes

Thank you. Your support is deeply appreciated.

3 Likes

This is really cool. Congratulations on being the first community initiated ckERC20 token. Well done @toliuyi and @juliansun!

4 Likes

We’ve been discussing the topic of ledger fees further within the DFINITY team and refined our thoughts a little. Apologies in advance for our thinking changing a little, but we felt it was better to be open about this now and suggest a change in tack earlier rather than later.

Where our thinking has evolved to;

  • Fees should be set at a level which enables the ledger (and the subnet) to cover the cost of running the ledger canisters i.e. ledgers should be economically sustainable.
  • Fees should also be set at level where they somewhat mitigate risks of DDOS, i.e it should somewhat costly to DDOS a ledger (and the subnet)
  • Given the volatility of crypto prices it doesn’t make sense to recommend/require too precise a range.
  • It should be relatively easy for users to understand the fee cost (the mental arithmetic should be easy)

With all that we felt it would make sense to recommend;

  • Fees are set to 1 * 10^x (i.e. 100, 10, 1, 0.1, 0.01, 0.001 etc)
  • Where ‘x’ is chosen, such that the resultant fee is equivalent to between 0.1 to 1 USD cent

In summary, the recommendation is for proposers to set the fee to a reasonable order of magnitude, rather than trying to over-optimise to hit a narrow range.

Our back of the envelope calculations indicate that a floor for economic sustainability today is when fees are set to greater than 0.01 USD cents equivalent, so setting fees initially in the range 0.1 to 1 USD cents leaves some margin of safety for token price volatility.

We remain open as always to the communities thoughts on this proposed range.

7 Likes

Thanks for giving further clarification on this. What’s the thinking on how the growth of these tokens ought to progress? Should proposers start a discussion and give a rationale for adding a token (thinking particularly of the current ckSHIB proposal) or is it a case of the more the merrier?

1 Like