[koinos proposal] Update claiming contract

in #koinos8 months ago (edited)

The initial distribution of the KOIN tokens was done 100% using Proof of Work. For that, the token was initially created as an ERC-20 token on the ethereum blockchain and the community could mine it or buy/sell it on uniswap.

In order to migrate this token from ethereum to koinos blockchain, Koinos Group created a Claiming Contract with the permission to mint KOINs on the koinos blockchain. In this contract the users have to submit a proof of the ownership of the tokens using the ethereum keys.

Although everyone would like to see a smooth transition from one blockchain to another, this change comes with a risk of losing funds due to mistakes commited by some members.

One of these mistakes was done by Azadi, one of the members of the community. Let me summarize what happened to him: He installed Kondor and created a new wallet but he didn't pay attention to the 12 words 😨 Once it was created he claimed the tokens in koinos blockchain. At that point he wanted to write down the 12 words but he could not find how to see them. After that, he asked for help in a koinos channel of his country and someone advised him to create a new wallet and make the claim there 😖  In conclusion, he lost his keys on Kondor.

Although he lost the keys from Kondor Wallet, he still keep the ethereum keys. He shared with the community the proof of the ownership of the ethereum address 0x95b83ff2263923c9c48ac6098d2c994e989c86e7, which was used in this is the transaction to claim the tokens. Here is the proof:

{
  "address": "0x95b83ff2263923c9c48ac6098d2c994e989c86e7",
  "msg": "0x4920616d20617a6164692e2049206d697374616b656e6c79206c6f7374206d79206b6f696e6f732070726976617465206b65792028636c61696d20696e20626c6f636b203237373437292e2054686973206973207468652070726f6f662e2049206b696e646c7920726571756573742074686520636f6d6d756e69747920746f206d6f766520746865736520746f6b656e7320746f2074686520616464726573732031413956775745457644785158367a4d336d464d665745574d66716743395836666f",
  "sig": "53e8121701954e13f343c60e44a205228add7a6aa4cd01beb53b6a7d260cd15d7f34bd17007aa6391f5cf8ab1fb310fc8d4787e612ce6f9740ec22481269ffac1c",
  "version": "3",
  "signer": "MEW"
}

You can verify the proof here:
https://www.myetherwallet.com/tools?tool=verify

And decode the msg here:
https://onlineutf8tools.com/convert-hexadecimal-to-utf8

Some people may argue that crypto is crypto and it is like bitcoin where you loss your assets when you loss your keys. However, I'm a strong believer that crypto should be something simple to use, with more alternatives to recover tokens.

And one of the reasons I like Koinos is the governance system that allows upgrades in the contracts without requiring forks.

Proposal to update the claiming process

In general terms, the change I'm proposing to the claiming process is:

Add the option to reverse the claim. That is, burn the tokens in the Koin contract and undo the claim in the Claim Contract.

  1. There is some specific period couting from the time of the claim where this reverse process can be done. For instance, 1 month.
  2. The account has to have the amount of Koin required for the reversion.
  3. This new logic only applies to new claims. The claims before the application of this proposal can not be reversed.
  4. The account from Azadi is an exception of the previous point. So he will be able to recover the funds.

Thanks to this more people will be able to recover the tokens if they do something wrong during the claiming process. Take into account that both Kondor Wallet and My Koinos Wallet are in very early stages and people can commit mistakes when using them.

Right now, only 41% of the tokens have been claimed. Then around 58 million of KOIN are still pending to be claimed.

Implementation

For the KOIN Contract:

  • Rewrite the contract in Assembly Script.
  • Add kernel access to the burn function so it can be called by the claim contract.
  • This access is limited by time (1 month) depending on the time of the claim.
  • Add the transition function: Used to modify the limit time just for the member who lost the keys. It can only be called once.

For the Claim Contract:

  • Add the unclaim function: It burns the tokens in the Koin Contract and reverses the claim. It also checks if the transaction is done in the proper period of time.
  • Add the transition function: Used to modify the limit time just for the member who lost the keys. It can only be called once.

To vote on this proposal either YES or NO go to https://koinosbox.com/polls/0.

Edit: Some members of the community have reported possible issues with this implementation. In particular, a possible scam where the scammer trades something with someone but using the claim to send tokens, and later on when the transaction is done he reverts it using the reclaim option. This is a very important flaw to considerate. So, here is a modification to mitigate this issue:
The owner of the ethereum key can reverse the claim at any time. At that point the tokens are burnt and assigned again in the claiming contract. However, the ethereum key has to wait 6 months in order to claim again. During this period the previous owner (koinos key) can get back the tokens.
Let me know in the comments what do you think about it.

Sort:  

I believe no scamming shall be allowed in claiming process. Best is to 1) build a kinda form-based frontend for users to fill in and with the push of a button the whole process is automated and 2) establish a trusted team to claim on behalf of the user eg the original KOINOS dev team.

EDIT: Voting for Poll at Koinosbox results in error
Screenshot 2023-07-04 at 15.00.09.png

FEATURE REQUEST: Add comment and Q&A/Discussion section to KoinosBox Poll pages.

Make sure to put your block producer address. You should see your node operator address at the bottom. Then you can vote.

Thanks for the suggestion of the Q&A discussion. Right now I don't have the time to work on that. So my suggestion is to discuss this in discord for the moment.