---
# System prepended metadata

title: kchannels - asset swap notes

---

# kchannels - asset swap notes

### Useful links

* http://docs.kchannels.io/
* https://github.com/abridged/collabland-wallet-auth
    * Useful [type definitions](https://github.com/abridged/collabland-wallet-auth/blob/master/src/utils/kchannels.js)
* https://www.reddit.com/r/ethereum/comments/i1jjjv/reddit_scaling_bakeoff_submission_abridged/

-----

### Requirements 

* JSON RPC service needed to fullfill the asset swap flow
    * two points of entry - `generate_quote()` & `fulfill_quote()`
* NodeJS / JSON RPC 2.0 based API service
* Sample client/UI to interact with the service
    * OR integrate into the existing dev UI we have seen ?
* Good unit test around the core and complex parts
    * Github runner or equivalent as test runner on commit 
* Infrastructure 
    * Hosted on a digital ocean droplet (or similar) somewhere
    * Postgresql for data persistance

-----

### Action plan

* **Asset Swap Service**

    * **Public methods**
        * Ability to query for exchange rate from asset 1 and asset 2
            * `generate_quote(asset from, asset to, amount) returns (quote_id, from, to, amount, fee)`
            * Stored in DB against channel ID
        * Approve quote for swap
            * `aprove_asset_swap(quote_id) returns (succsss, receipt...?)`
            * Looks up and validates provided quote

    * **Internal concerns**
        * Persistance of generated quote
            * Multiple quotes can be generated for the same swap and user
        * Exposure of secure/authenticated JSON API
        * Quote logic
            * Calculate exchange rate
                * How to determine this - going externally?
            * Calculate fee
                * Are fees dynamic?
            * Ensure asset exchange is possible via liquidity depth checks i.e. do I have enough of that asset to do the swap
        * Approve asset swap exchange
            * Validate quote
            * Validate ability to still perform the exchange
            * Validate signatures (needs more understanding)
            * Perform the actual exchange
                * ... ? need to understand how this happens in more detail

* **Domain model changes**
    * `ExternalTransactionReference` - addition of source `chain_id` 
    * `ChannelAsset` - addition of source `chain_id`
    * `TransactionValue` - addition of source `chain_id`
    * See [Multichain-VOs](#Multichain-VOs) diagram from full relationship strucutre


-----

### Questions

* JSON RPC authentication scheme?
    * How to auth the caller?
    * * (JY) we'll create wireframes

* What relevance does the asset swap watch tower have?
    * Do we care about this at this stage?
    * * (JY) Kaman?

* How to detemrine exchange rate?
    * 3rd party service vs onchain to price discovery?
    * * (JY) DAI -> xDAI, no price discovery needed
 
* How to handle multiple quotes
    * Do quotes expire?
    * Can any quote given be redeemed at any time in the future?
    * * (JY) only one quote allowed and they do not. expire

* How do zones work in relation to chains?
    * Is this is one zone per chain i.e. mainnet = zone 1 | xDAi = zone 2 ?
    * Side question - is there a scaling problem with zones as the userbase grows?
    * * (JY) Kaman?

* Asset swap fees?
    * What logic drives the exchange fee e.g. is it volume based or fixed?
    * Do different swaps have different fees?
    * Do different chains have different fee e.g. xDAI 0.25% | ETh 1% ?
    * * (JY) let's hard code the fee for now

* Error states?
    * When asset approval happens the quote is no longer valid?
        * liquidty not enough
        * quote expired e.g. from one week ago ... is this a thing?
        * fee has changed whilst quote is in flight?
    * * (JY) quote should never expire or change, only issue is lack of liquidity

* Attack secnarios to worry about?
    * I assume this is dramatically reduced is correct signature checks are performed?
    * * (JY) will think through this once we have initial implementation (can't think of any attacks at this abstract level)

* How does kchannels deal with things like block reorgs?
    * * (JY) Kaman?

-----

### Diagrams

##### Asset Swap POC

![](https://i.imgur.com/5Vbrxyn.png)


##### Asset Swap Service Flow

![](https://i.imgur.com/z3n6gJt.png)

##### Atomic Asset Exchange

![](https://i.imgur.com/QBkFMNl.png)

##### Multichain Operation

![](https://i.imgur.com/GueInyQ.png)

##### Multichain VOs

![](https://i.imgur.com/wvVi0n3.png)

##### Phase 1 - Multichain Operation

![](https://i.imgur.com/d9AUwWo.png)
