#356 Recover KSM from a erroneous teleport/XCM call
We lost 50 KSM in a blockhole during a teleport call. We were trying to teleport 50 KSM from our account on Bridgehub-Kusama to Kusama.
We first tried with small amounts after we had found the right working call and then we thought copied the call-data to initiate the actual transfer, but it was an old copy that lead to the error of unroutable
, which is a fatal error and the tokens get lost apparently in the system. We don't know where they get lost. You can see it in the events that the tokens don't get deposited anywhere. This is new information to us.
This is the call-data I have used: 0x1f0903000109030300010100666963fc8192623504df2da473a1db2c69e1660463e2fd5071bcc68a96c3970d0304000100000b00203d88792d0000000000
This would have been the correct call-data: 0x1f090301000300010100666963fc8192623504df2da473a1db2c69e1660463e2fd5071bcc68a96c3970d0304000100000b00203d88792d0000000000
Our request is to recover the 50 KSM from openGov to the account that made call.
- The call was our mistake, we should have double checked.
- There is work in progress by the core developers to make sure these errors are claimable in the future, but it's not in production yet.
- The 50 KSM was on that account was to bid for a system-collator slot for bridgehub, which we didn't win. The teleport was one way until runtime upgrade
1,001,000
Show More
Alzymologist Oy Decentralized voice
We approve this ideologically, but as a design shop we are obliged to take due diligence in doing some tech analysis of incident. This will take some time, but now:
Just a brief and quick 3rd party review to be done in 5 minutes.
Extrinsics decoded with BridgeHub Kusama
metadata version spec_version: "1001000", spec_name: "bridge-hub-kusama"
Incorrect (executed) call:
Pallet: PolkadotXcm
Call: limited_teleport_assets
Field Name: dest
Enum
Enum Variant Name: V3
Struct: 2 field(s)
Field Name: parents
u8: 0
Field Name: interior
Enum
Enum Variant Name: X1
Enum
Enum Variant Name: GlobalConsensus
Enum
Enum Variant Name: Kusama
Field Name: beneficiary
Enum
Enum Variant Name: V3
Struct: 2 field(s)
Field Name: parents
u8: 0
Field Name: interior
Enum
Enum Variant Name: X1
Enum
Enum Variant Name: AccountId32
Field Name: network
Enum
Enum Variant Name: None
Field Name: id
Sequence u8: 666963fc8192623504df2da473a1db2c69e1660463e2fd5071bcc68a96c3970d
Field Name: assets
Enum
Enum Variant Name: V3
Sequence: 1 element(s)
Struct: 2 field(s)
Field Name: id
Enum
Enum Variant Name: Concrete
Struct: 2 field(s)
Field Name: parents
u8: 1
Field Name: interior
Enum
Enum Variant Name: Here
Field Name: fun
Enum
Enum Variant Name: Fungible
u128: 50000000000000
Field Name: fee_asset_item
u32: 0
Field Name: weight_limit
Enum
Enum Variant Name: Unlimited
correct call (should have been executed):
Pallet: PolkadotXcm
Call: limited_teleport_assets
Field Name: dest
Enum
Enum Variant Name: V3
Struct: 2 field(s)
Field Name: parents
u8: 1
Field Name: interior
Enum
Enum Variant Name: Here
Field Name: beneficiary
Enum
Enum Variant Name: V3
Struct: 2 field(s)
Field Name: parents
u8: 0
Field Name: interior
Enum
Enum Variant Name: X1
Enum
Enum Variant Name: AccountId32
Field Name: network
Enum
Enum Variant Name: None
Field Name: id
Sequence u8: 666963fc8192623504df2da473a1db2c69e1660463e2fd5071bcc68a96c3970d
Field Name: assets
Enum
Enum Variant Name: V3
Sequence: 1 element(s)
Struct: 2 field(s)
Field Name: id
Enum
Enum Variant Name: Concrete
Struct: 2 field(s)
Field Name: parents
u8: 1
Field Name: interior
Enum
Enum Variant Name: Here
Field Name: fun
Enum
Enum Variant Name: Fungible
u128: 50000000000000
Field Name: fee_asset_item
u32: 0
Field Name: weight_limit
Enum
Enum Variant Name: Unlimited
EDIT in a few minutes:
ok this is hard to read. Diff starts in line 7:
diff correct:
Field Name: parents
u8: 1
Field Name: interior
Enum
Enum Variant Name: Here
diff incorrect:
Field Name: parents
u8: 0
Field Name: interior
Enum
Enum Variant Name: X1
Enum
Enum Variant Name: GlobalConsensus
Enum
Enum Variant Name: Kusama

@Alzymologist Thanks for checking this and posting it here. the Difference indeed that the destination should have been [parents:1, interior:here].
What's your plan if this passes and then one day your 50 KSM becomes recoverable?

@AdamClaySteeber We would send it back to the treasury 😇
I'm sorry I didn't vote on this, I deliberated on it for a bit too long - I couldn't decide until just recently! But it would have been inconsequential since I would have voted AYE. I'm glad it passed! If your funds become recoverable I will be sure to check that they are refunded to the Treasury.
Be more careful next time :)
Sorry guys, please be very careful with assets, it may be someones funds...

Hey @SPACE_INVADER maybe it was not clear the post to you. The funds were ours and not someone elses.

@SPACE_INVADER The funds were our own and not someone elses
Although there was a mistake with the call I'd argue the going missing is an issue with the system and not your fault.

@olanod The system allows for the right calls to be made, it's was our fault to make the wrong system.
Sorry guys, if it was your mistake you need to be responsible. If we recover it , it brings bad precedent and there will be tons of applications. I vote NAY.
Discover similar proposals