Code Monkey home page Code Monkey logo

aips's Introduction

Ark Improvement Proposals

Contributing

  • First review the AIP-1-Process Guidelines for submitting an AIP.
  • Open a new issue and start a discussion related to your AIP. The number assigned to the issue will be also your AIP number.
  • Clone the repository and write your AIP. Follow the AIP-Template structure and guidelines.
  • Submit a Pull Request to Ark's AIPs repository. Before submitting a pull request to the official repository try to obtain consensus from the community and the team (discussion log under opened issue).

When your Pull Request is merged you will continue to work on the AIP together with the AIP editor.

Current AIPs

Number Title Author Type Layer Status / Discussion
1 AIP Purpose and Guidelines Kristjan Kosic Informational Active
2 Number of Votes per Account Guillaume Verbal Standard Consensus (hard-fork) Canceled
3 Anonymous Vote Guillaume Verbal Standard Consensus (hard-fork) Canceled
4 Number of Forging Delegates Guillaume Verbal Standard Consensus (hard-fork) Canceled
5 Forging Secret Guillaume Verbal Standard Consensus (hard-fork) Canceled
6 Lightning Networks Guillaume Verbal Standard Consensus (hard-fork) Canceled
7 Proxy Voting Guillaume Verbal Standard Consensus (hard-fork) Canceled
8 An improvement of transaction protocol Toons Standard Network Implemented
10 Automatic Profit Sharing Ryano Standard Consensus (hard-fork) Canceled
11 Upgrade of Transaction Protocol FX Thoorens, Dafty Standard Consensus (hard-fork) Implemented
12 Smart Contract FX Thoorens, Adrian Cearnau Standard Consensus (hard-fork) Draft
13 URI Scheme William Dens Standard Applications Draft
14 RESTful API Brian Faust Standard Applications Implemented
15 Event based subscriptions (WebHooks) Kristjan Kosic Standard Applications Implemented
16 Dynamic fee calculations Kristjan Kosic, FX Thoorens, Alex Barnsley Standard Protocol Implemented
17 Transaction pool wallet manager Kristjan Kosic, FX Thoorens Standard Protocol Implemented
18 Multisignature protocol FX Thoorens, Alex Barnsley Standard Protocol In progress
19 Incremental snapshot system FX Thoorens, Kristjan Kosic Standard Core Implemented
20 Arkchain network registration for bip44 derivation path FX Thoorens Standard Core Draft
21 Ark Masternodes galperins4 Standard Core / Protocol Draft
22 On chain price discovery using liquidity gates mak Standard Core / Protocol Draft
23 Delegate markets and Ark token economic rework mak Standard Core / Protocol Draft
24 Double forging protocol improvements Kristjan Kosic Standard Core / Protocol Draft
25 Providing PoW like guarantees on (D)PoS networks mak Standard Core / Protocol Draft
26 URI Scheme Improvements vmunich Standard Core / Protocol Draft
27 Addressing Long Range Attacks mak Standard Core / Protocol Draft
28 JSON-API specification compliant API, Modules & Dated Versioning Brian Faust Standard Core / Protocol Draft
29 Generic Transaction Interface Brian Faust, Kristjan Kosic, Joshua Noack Standard Core / Protocol Draft
31 Command Line Interface Brian Faust Standard Core / Protocol Draft
32 Plugin System Improvements Brian Faust Standard Core / Protocol Draft
33 Modular Voting Logic Brian Faust, Joshua Noack Standard Core / Protocol Draft
34 Modular Consensus Logic Brian Faust, Joshua Noack Standard Core / Protocol Draft
35 Plugin Package Manager Brian Faust Standard Core Draft
36 Entity Declaration - Transaction Type Brian Faust Standard Core Draft
37 Switch Delegate With Single Vote Transaction Dmitry Tyshchenko Standard Core Draft
38 BFT Consensus Brian Faust Standard Consensus Draft
81 Core Virtual Machine Kristjan Kosic Standard Core / Protocol Draft
85 Sybil deterrence via relay friction mak Standard Core / Protocol Draft
102 Hashed Time-Locked Contracts ARK.io Team Standard Core / Protocol Draft
103 BridgeChain Registration Types ARK.io Team Standard Core / Protocol Draft
126 Safer cold storage using Ark covenants mak Standard Core / Protocol Draft

aips's People

Contributors

boldninja avatar bradylove avatar doweig avatar faustbrian avatar fix avatar galperins4 avatar itsanametoo avatar j-a-m-l avatar kovaczan avatar kristjank avatar mariowhowrites avatar moazzamak avatar nigui avatar rainydio avatar rrbest avatar samharperpittam avatar spkjp avatar vmunich avatar vulet avatar willdn avatar zillionn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aips's Issues

[Weekly Digest] Apr 8, 2019 - Apr 14, 2019

Here's the Weekly Digest from Mon, Apr 8, 2019 12:00 AM to Sun, Apr 14, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were 3 issues. Of these, 2 issues have been closed and 1 issues are still open.

Opened

@kristjank

Closed

@ArkEcosystemBot

Pull Requests

Last week, no pull-requests were opened, closed or merged.

Releases

Last week there were no releases.

Contributors

Last week there were no contributors.

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Apr 8, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

[Weekly Digest] Feb 11, 2019 - Feb 17, 2019

Here's the Weekly Digest from Mon, Feb 11, 2019 12:00 AM to Sun, Feb 17, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were 2 issues. Of these, 1 issues have been closed and 1 issues are still open.

Opened

@ArkEcosystemBot

Closed

@ArkEcosystemBot

Pull Requests

Last week, 2 pull-requests were opened, closed or merged.

Merged

Last week, 2 pull-requests were merged.

@Nigui

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@Nigui

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Feb 11, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP: Non-fungible Token Standard


AIP: 33
Title: Non fungible token management
Authors: Guillaume Nicolas [email protected]
Status: Draft
Discussions-To: https://github.com/arkecosystem/AIPS/issues
Type: Standards Track
Category: Core
Created: 2019-02-11
Last Update: 2019-09-11

Abstract

While fungible tokens can be exchanged with each other without loss of value, non-fungible tokens are unique pieces with value based on their properties and scarcity.
It's a new way to digitize assets ownership like sports cards, game stuff, art pieces, houses, identities, ...

This AIP proposes to add a new feature for Ark framework: the non-fungible token support.
It leads to create new transaction types for token creation, transfer and properties values updates.

Motivation

This concept is born on Ethereum with the EIP 721 where the discussion was: How can we standardize smart-contracts implementing non-fungible tokens, from the representation and transfer point of views ?. The main goal was to ease tool creation (like exchanges) wherein multiple NFT classes could be traded, without the need to adapt to each token specificities.

Now NFTs are very popular on blockchain platforms, Ethereum, Qtum, Stellar, Neo, EOS,...

This AIP differs from EIP 721, in the way that we want framework users to be able to configure NFT class, create, update and transfer on their custom chain, without editing core code, but simply with configuration files. It's continuity of blockchain in one click baseline.

Specifications

Here are the terms used in this document:

  • NFT: stands for non-fungible token
  • NFT class: like in OOP, it defines all tokens properties, characteristics and behaviours (like distribution model, type of data attached to a token, visibility, price,...). They can't be updated by user transactions. They're used to identify NFT classes (supposing multiple ones co-exist on the same chain).
  • NFT: it's a unit, an instance of the NFT class. It's an indivisible and unique asset, verifying all NFT class properties.
  • mint: token creation/instantiation process.

Note: vocabulary is arbitrary and can be updated with discussions

In this part, we focus on specifications for a simple NFT class, allowing mint (first-in-first-served and free), ownership transfer and properties values updates. We assume that NFT class is living alone on a dedicated chain (i.e the chain does not handle multiple ones).
Then, we describe a non-exhaustive list of token features we have to keep in mind during the design process.

Transactions

The advantage of NFTs is that you cryptographically own a token. As a consequence, a transaction is valid only if sender is the token owner.

In order to be able to handle NFTs, at three new transactions must be defined (types 9 and 10 and 11).

Three distinct transaction types is useful to :

  • set different minimum fees for different NFT actions (based on chain token economy)
  • be able to easily distinguish NFT actions in tools (CLI, explorer or even in plugins).
  • add global checks on which transaction types a wallet can submit (if some roles exist on a chain)

Note: types number are arbitrary choices. They'll be increased to prevent conflicts with future types released before nft transactions.

> Mint (type 11)

The first thing to do to get a NFT is to create and broadcast a mint transaction.
This transaction is responsible of writing on chain that a given wallet is the first owner of a token identified by a never used value.

Transaction sender will be the first NFT owner.
NFT must not be owned by a wallet before transaction application.
If properties are set, they must comply with their network constraints (More details below)

Transaction dedicated parameters

  • token id, a 32 characters string
  • (optional) a list of properties to set at creation (a simple key/value json object)

Transaction payload

Description Size (bytes) Example
type 1 0x0B
token id 32 0x0000000000000000000000000000000000000000000000000000000000000001
properties length 1 0x01
property N key length 1 0x12
property N key (utf-8) 1-255 0x70726f706572747931
property N key length 1 0x40
property N value 1-255 0x3C9683017F9E4BF33D0FBEDD26BF143FD72DE9B9DD145441B75F0604047EA28E

Payload size is between 33 and 130 KB (type is a mandatory field of transaction header )

Design choices

  1. token id size (32 bytes) is an arbitrary choice inherited from ERC721 specifications identifying NFTs as the largest unsigned integer of the EVM: uint256 (256 bits). It also allows a wide variety of applications because UUIDs and sha3 outputs are of this size.
  2. Token id is computed off-chain. It's a design choice easing the minting process. The same process is used in popular NFTs on other chains (like Cryptokitties on Ethereum).
  3. It's not possible to mint a token for someone else. Two transactions are needed (mint then transfer). It's a questionable design choice.

> Transfer (type 9)

Transfer NFT ownership to another wallet.

Transaction sender must own the identified nft and recipient will be the new owner.

Transaction dedicated parameters

  • NFT identifier to transfer
  • recipient wallet address, future token owner

Transaction payload

Description Size (bytes) Example
type 1 0x09
token id 32 0x0000000000000000000000000000000000000000000000000000000000000001
recipient address 21 0x171dfc69b54c7fe901e91d5a9ab78388645e2427ea

Payload size is 53 bytes (type is a mandatory field of transaction header )

Design choices

  1. Transfer type is only used to transfer a token. You can't transfer and update properties with the same transaction.
  2. It's not possible to delegate transfer right to another wallet (like it is in ERC721 specification) It's a questionable design choice.

> Update (type 10)

This transaction type is used to add, update and delete properties of a NFT instance.

NFT must be minted and transaction sender must own NFT before application.
Each property must comply with its network constraints (More details below)

Transaction dedicated parameters

  • token identifier to update properties
  • a list of properties and their value (a key/value json object).

Transaction payload

Description Size (bytes) Example
type 1 0x0B
token id 32 0x0000000000000000000000000000000000000000000000000000000000000001
properties length 1 0x01
property N key length 1 0x12
property N key (utf-8) 1-255 0x70726f706572747931
property N key length 1 0x40
property N value 1-255 0x3C9683017F9E4BF33D0FBEDD26BF143FD72DE9B9DD145441B75F0604047EA28E

Payload size is between 33 and 130 KB (type is a mandatory field of transaction header )

Design choices

  1. properties length is the number of updated properties. It must be positive. Size of the payload has been limited to 1 byte. As a consequence, the maximum number of updatable properties in a single transaction is (2^8)-1=255 properties.
  2. property key is encoded in utf8 and can contain a maximum of 255 characters.
  3. property value must be an output of the sha-256 function. It's a design choice used to limit the size of token properties value. We don't want blockchain to store a lot of crappy data, but prints of these crappy data stored elsewhere.
  4. Some controls on new properties value can be made on-chain with NFT constraints feature (details bellow).
  5. Token id and token owners can't be updated with this transaction type. Token id can't be updated at all.Token owner can be updated with a transfer transaction.

Model

A new model must be created to represent an NFT instance:

class NFT {
    public id: string;
    public properties: { [_: string]: string };
    constructor(id: string) {...}
    public updateProperty(key: string, value: string) {...}
}

Existing Wallet model must be extended to reference owned tokens id:

class Wallet {
    [...]
    public tokens: string[];
    
    [...]
}

Events

In order to be compatible with existing applications handling NFTs (exchanges, wallets,... ), we must provide a simple way to detect updates on NFTs.
Similarly to ERC721 proposal, we can broadcast events at several steps of NFTs life-cycle:

  • token creation
  • ownership update
  • properties update

Core-webhooks is the module forwarding events to applications.

It's listening event-emitter events, so new blockchain events must be added:

  • nft.created
  • nft.transferred
  • nft.updated

Database

We need to store tokens and their properties values in the database because of scalability. Indeed, store nfts and their properties in memory (like wallets) could cause performance issues and memory bursting.

A new repository and queries in core-database-postgres are required.

API

We need new routes fetching NFTs from current chain state.
Here are some new routes, depending on your NFT name configuration: <nft_name> (see configuration file below).

  • [GET] /<nft_name>s/: to index all sealed NFTs. This route follows the same logic as other root routes (like /transactions or /blocks). It's paginated and returns all properties for each of your NFT.
  • [GET] /<nft_name>s/{id}: to show NFT instance with given identifier
  • [GET] /<nft_name>s/{id}/properties: to get all properties of a NFT (paginated), a list of key-value
  • [GET] /<nft_name>s/{id}/properties/{key}: to get value of a specific property of a NFT, designated by its key
  • [GET] /wallets/{wallet_id}/<nft_name>s/: to index all sealed NFTs for a specific wallet, designated by its public key or address. This route follows the same logic as /<nft_name>s/.

Existing routes:

  • [POST] /transactions/: is used to submit a new NFT transaction (transfer or update).

NFT dedicated plugin

In order to isolate NFT support feature, a new core plugin has been created, dedicated to NFT management.
This plugin has many roles:

  • define models
  • parse configuration
  • build token logic and validation rules from configuration
  • keep and manage the state of NFTs at runtime
  • ...

NFT configuration file

A NFT must be configurable through network.json file because its properties are specific to a network and must be the same for all nodes validating nft transactions.

A new property of network is created.

Here is a configuration sample where chain hosts UNIK NFTs, which can have :

  • an immutable property a with only 2 possible number values (1 and 2).
  • a genesis property b
{
    "nft": {
        "<nft_name>": {
            "name": "Your NFT Name, for human reader",
            "properties": {
                "a": {
                    "constraints": [
                        "immutable",
                        {
                            "name": "type",
                            "parameters": {
                                "type": "number",
                                "min": 1,
                                "max": 2
                            }
                        }
                    ]
                },
                "b": {
                    "genesis": true
                }
            }
        }
    }
}

Please note the <nft_name> will be used to setup the API HTTP routes, sometimes also by adding a trailing s when pluralized.

Example, for the UNS network, powering the UNIK NFT.

{
    "nft": {
        "unik": {
            "name": "UNIK",
            "properties": {
                "a": {
                    "constraints": [
                        "immutable",
                        {
                            "name": "type",
                            "parameters": {
                                "type": "number",
                                "min": 1,
                                "max": 2
                            }
                        }
                    ]
                },
                "b": {
                    "genesis": true
                }
            }
        }
    }
}

NFT genesis property

A genesis property is a NFT property that must be set at NFT creation (in a mint transaction).

If a NFT property has the (object) property genesis=true then, the mint transaction must include nft.properties asset AND this property must have a value ( compliant with may exist constraints).
If it doesn't, then transaction is rejected and NFT is not minted.
By default, a NFT property is not genesis.

NFT constrained property

A NFT property constraint is a set of rules a property value update of a NFT transaction (mint or update) must obey in order to be applied and forged.

It's composed by:

  • a name/identifier
  • optional parameters to customize constraints depending on property.

As an example, we could have an immutability constraint (immutable as identifier) which causes a property to not be updatable after being set.

As an other example, we could have more abstract constraints like type which causes a property value to be of a specific type (number, string,... ).
In that case, we could add constraints depending property type and value. In the example above, we set that property a must be a number between 1 and 2.

Constraint logic is implemented into core-nft plugin as a class which must implement the Constraint interface:

interface ConstraintApplicationContext {
    propertyKey: string;
    propertyNewValue: string;
    transaction: ITransactionData;
}

interface Constraint {
    apply(context: ConstraintApplicationContext, parameters?: any): Promise<void>;
    name(): string;
}

Each constraint must set a name and implement a check on nft property update transaction validity.
To check validity, a constraint has several information:

  • a context
    • the updated property key
    • its new value
    • and the overall transaction ( can be used to set complex rules ( based on sender, fees, or any other nft property update value ) )
  • possible constraint parameters as described previously.
  • and they can do asynchronous operations like get property current value from database.

Bellow is an example of how type constraint could be implemented (voluntarily simplified):

class TypeConstraint implements Constraint {
    public async apply(context: ConstraintApplicationContext, parameters?: any){
        const { type, min, max } = parameters;
        if( type === "number" && ( context.propertyNewValue < min || context.propertyNewValue > max )){
            throw new ConstraintError();
        }
    }

    public name() {
        return "type";
    }
}

Constraint application must be made inside the canBeApplied method of nft-update transaction handler.

Current proposal makes nft property constraint relatively easy to customize : register a new custom constraint logic to constraint manager and reference it directly from network.json file.

Note 1: network.json is validated before used using schemes. When adding custom constraints, you must update network.json scheme accordingly.

Advanced token features

Here is a non-exhaustive list of behaviours and characteristics token class could specify, to keep in mind during the design process. They're inspired by existing ERC721 tokens. Some items could have a dedicated AIP in the future.

  • advanced token distribution
    • complex mint process,
    • dynamic/static price,
    • limit available tokens,
    • auction,
    • renewable ownership,
    • ...
  • security mechanisms with roles controlling token life-cycle
    • unusable,
    • kill,
    • forced release,
    • ...
  • multiple NFT class on the same chain
  • composability (NFT linked to each other)
  • ...

Reference Implementation

I'm working on @unik-name solution at Spacelephant and our product is based on NFTs.
We've developed a proof-of-concept of Ark's NFT in our labs.

Project sources are available on the dedicated repository.

[Weekly Digest] Mar 18, 2019 - Mar 24, 2019

Here's the Weekly Digest from Mon, Mar 18, 2019 12:00 AM to Sun, Mar 24, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is closed now.

Closed

@ArkEcosystemBot

Pull Requests

Last week, no pull-requests were opened, closed or merged.

Releases

Last week there were no releases.

Contributors

Last week there were no contributors.

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Mar 18, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP - Add Nonces to prevent replay attacks

Add nonces to transactions in order to prevent replay attacks.

As soon as there is a transaction with a bigger nonce then the previous transaction in the pool becomes invalid.

That prevents attacks where you can store the transaction and later replay it even if the sender issued a replacement transaction.

With nonces you can replace unforged transactions while being sure that the old unforged yet signed transactions are invalidated.

AIP 7: Proxy Voting

cosmos/cosmos#43 (comment)

back in 2014, we were running BitShares in version 1.0 which had exactly the problems you described. Today, with Bitshares 2.0, we have proxy voting. It allows shareholders to direct their voting power to another account which then has more total voting power. This allows to establish a group of arbitrary size to be able to react quickly shall it be necessary (e.g. fire a witness)

Witness aka Forging delegates. That is a good idea to make the network more responsive.

[Weekly Digest] Apr 1, 2019 - Apr 7, 2019

Here's the Weekly Digest from Mon, Apr 1, 2019 12:00 AM to Sun, Apr 7, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were no issues.

Pull Requests

Last week, 1 pull-request was opened, closed or merged.

Merged

Last week, 1 pull-request was merged.

@supaiku0

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@supaiku0

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Apr 1, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

[Weekly Digest] Feb 18, 2019 - Feb 24, 2019

Here's the Weekly Digest from Mon, Feb 18, 2019 12:00 AM to Sun, Feb 24, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were 4 issues. Of these, 1 issues have been closed and 3 issues are still open.

Opened

@ArkEcosystemBot

@doubled1c3

@Nigui

Closed

@ArkEcosystemBot

Pull Requests

Last week, 1 pull-request was opened, closed or merged.

Opened

Last week, 1 pull-request was opened.

@j-a-m-l

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@j-a-m-l

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were 2 stargazers.

@cambo666 @laurentlourenco

You all are the stars! 🌟


That's all activities since Mon, Feb 18, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP-13: Support for Exchange Rate Lookup?

I hope I am creating this issue correctly. Upon reading the AIP 13 specifications, it seems really cool and useful. How would a common user or small business owner use this feature? Perhaps I could oversee the creation of a short tutorial video.

In any case, my question is this. Does AIP13 support the embedding of the fiat value, such that when the link is clicked, or QR code is scanned, it tells the wallet a fiat value, which is then turned into an ARK value that is requested? That would be extremely convenient and now it seems exchange rates are well integrated into mobile and desktop wallets both. Thank you

AIP-16 Multisignature protocol

  AIP: 16
  Title: Multisignature protocol
  Authors: François-xavier Thoorens 
  Status: Draft
  Type: Standards Track
  Created: 2018-05-24
  Last Update: 2018-05-31

Abstract

This AIP is the description of the multisignature protocol. The current one, the flaws and the proposed improvement

Rationale

The multisignature scheme is different from classic scheme one can in Bitcoin (p2sh script) or in Ethereum (smart contract). Indeed, the mutlisignature is seen as the combination of 2 transactions:

  • multisignature registration transaction (type 4)
  • classic transactions where are added the needed signatures to authorise the inclusion in a block.

This protocol has the advantage over p2sh or smart contract in term of governance: if the protocol is flawed, the responsibility is not from the smart-contract or p2sh author but from the initial code, and thus pushing the responsibility to fix and reimburse the damages of the flaw to the community.

In essence the multisignature registration transaction contains the set of public keys, the signatures of the owners of these keys and the parameters of the multisign (minimum signatures in m/n as well as lifetime)

Limitations:

  • multisignatures are not upgradables
  • multisignatures cannot be resigned
  • multisignatures contain one single publickey owner to conform to normal addressing system
  • lifetime parameter does not prevent from performing filling attacks on the transaction pool

Improvements:
the improvement proposed try to solve the above issues describing a protocol to make multisignature transaction much more useable as the current legacy system inherited from lisk. There is also a discussion to integrate "Simple Schnorr Multi-Signatures with Applications to Bitcoin" as described by Gregory Maxwell, Andrew Poelstra, Yannick Seurin and Pieter Wuille here: https://eprint.iacr.org/2018/068

Specifications

Legacy protocol:
rule 1 - registration multisign: ownerPublickey (from where the address is derived), list of committing publickeys (N), lifetime (from 1 to 72 hours), min minimum (0 < M < N+1), list of N signatures.
rule 2 - transaction acceptance: minimum of M different signatures corresponding to different committing public keys should be included into the transaction.
rule 3 - if not enough signatures are present, the tx is stocked into the transaction pool for lifetime hours until enough signatures are sent via the API - this rule is lisk legacy ans has been removed from the beginning.

New protocol:

  • lifetime is removed from protocol together with above rule 3
  • address is derived from a combination of committing public keys, removing the need of owner public key base58_check(version + ripemd160(sha256(concat(pk1, ..., pkn))))
  • proposed version is 0x05 to match P2SH version on bitcoin (address starting with 3)

AIP 4: Number of Forging Delegates

cosmos/cosmos#43 (comment)

The number of witnesses has indeed been constraint in BitShares 1, but is no longer in BitShares 2. It is yet another shareholder voted parameter that could go from 11 up to 1100 (arbitrary number). The scaling constraints are in fact the time it takes for packages to travel around the world. If you had all the validators in one room, you could easily scale to billions of transactions with block confirmation times of less than 1sec, but a publicly distributed and decentralized network is located around the globe with worst case scenarios of 1-2secs for a roundtrip of packages.

AIP-60: Make votes from inactive wallets obsolete

This AIP is inspired by Tezos where inactive addresses are not allowed to vote (or mine, in our case forge) until they are re-activated. They consider an address as inactive if it's not showing any activity for a year (determined by timestamps).

1. How would this be seen in Ark?

Deactivated wallets would not add to the vote weight of a delegate. At the point where we try to get active delegates we would filter out wallets without any activity and not add their Ark holdings towards the vote weight of that delegate.

2. What would classify a wallet as inactive?

First thought that comes to mind is if the wallet has no incoming/outgoing transactions for X days (eg. 365). Unfortunately in reality there is a flaw here because this would mean that a wallet would stay active until the delegate that they are voting for is sharing rewards. Which in one scenario could mean if an individual looses keys to his wallet they'd end up voting for a delegate despite the fact that the wallet should really be marked as inactive.

Another thing is if delegates themselves could "resurrect" their voters wallets by sending small transactions to them.

Based on this I'd suggest that we'd only look at outgoing transactions. Only small concern I'm having with this approach is it could potentially add a little bit extra complexity for long term hodlers.

3. How would this change be reflected in delegate rankings today?

Wallets voting that haven’t made any outgoing transaction (eg. β€œinactive” wallets) since 1.1.2018:

  • All: 12304
  • With balance of > 0 AKR: 8338 (total voting power of 12,951,174 ARK)

4. What would activate an wallet?

Depending on our decision under point 2, but in general any outgoing transaction from a wallet could activate it.

5. Technical implementation

To be determined based on the discussion under this issue.

AIP 5: Forging Secret

Forging Secret, you would need both passphrases to generate a secret, that secret would be stored in the config.json and is what enables you to forge. That secret would prove your identity and includes a nounce (number). So if your server gets hacked you can generate a new secret with nounce + 1 so the previous secret (the one that was hacked) is not usable anymore. That way no more passphrase on servers, would also solve the forging/voting account separation. Since no key on server anymore, there’s no need to separate those accounts

AIP draft Pluggable Smart Contract Engine

Rather than tightly integrate the EVM smart contract engine with the Ark VM, it would be smarter to make this another pluggable subsystem. The upside for this is that the blockchain developer using Ark can choose which smart contract engine makes sense (and there are alternatives to EVM that have a lot of merit), but also, even if they use EVM, they can specify and lockdown exactly which version of EVM they will deploy.

If you don't do something like this then updating the EVM within the ArkVM periodically as the EVM itself evolves will turn into an ongoing problem. On the one hand ArkVM will typically support an out-of-date version of EVM but the pressure to update the EVM within the ArkVM will be countered by the demands of existing projects who will want the Ark team to continue to support their deployments.

With a pluggable interface for smart contract engines third parties can step in and provide and support alternative smart contract engine solutions (and versions thereof) thus freeing the Ark team from that headache while also providing the opportunity to leapfrog the EVM in terms of capability as new smart contract engines emerge in the marketplace.

AIP 20, Arkchain network registration for bip44 derivation path

  AIP: 20
  Title: Arkchain network registration for bip44 derivation path
  Authors: Fx THOORENS 
  Status: Draft
  Type: Standards Track
  Created: 2018-09-26
  Last Update: 2018-09-26

Abstract

In order to manage correctly HD wallets (either as soft version or using hardware wallets such as ledger nano s) and prevents from cross sidechain attacks/privacy risks, a slightly modified version of bip44 is proposed.

Motivation

Using HD wallet, combined with hardware wallet is seen as a the technique to improve security of wallets on blockchains.

As far as ark is concerned, applying bip44 is not adapted to sidechain for several reasons:

  • bip44 is only taking care of coin definition. If sidechains are used with the same coin id, the security issue due to public keys leak across side chain is not solved
  • If all sidechains register their own coin id on slip44 (for info ark registered as coin id = 111), it would pollute unnecessarily the standard and will be unusable for hardware wallet. For security reason ledger applies restriction to the derivation path at compile time of the ark app. Which mean they would need to publish a new version of the ark app anytime a new arkchain is launched
  • unnecessary use of change since there is no UTXO for ark

Rationale

In order to leverage existing infratructure developed by ark in a frictionless way, a new id is included in the standard bip44 derivation path called network

Specifications

We define the following 5 levels in BIP32 path:

m / purpose' / coin_type' / network' /account' / address_index

since ark is registered with coin_type = 111 any arkchain will have the following structure:

m / 44' / 111' / network' /account' / address_index

Here are the registered network so far:
mainnet: 0
devnet: 1

Any other network should register by requesting an update of this specification to the authors.

[Weekly Digest] Apr 29, 2019 - May 5, 2019

Here's the Weekly Digest from Mon, Apr 29, 2019 12:00 AM to Sun, May 5, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were 3 issues. Of these, 2 issues have been closed and 1 issues are still open.

Opened

@moazzamak

Closed

@ArkEcosystemBot

@roks0n

Pull Requests

Last week, 2 pull-requests were opened, closed or merged.

Opened

Last week, 1 pull-request was opened.

@vasild

Closed

Last week, 1 pull-request was closed.

@roks0n

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@vasild

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Apr 29, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

API 13: Support signing transactions

There should be more functionality to the ark: schema besides just sending transactions. A few things I'd like to see it supporting:

  • Sign and verify messages
  • Vote for a delegate
  • Add a new network
  • Add a new contact
  • Switch to a specific peer
  • Send a transaction using a specific peer

AIP:21 - Discussion

My Concerns:

Unclear how master node rounds would integrate into delegate rounds

  • Distribution of ARK to master nodes would happen when forging a block. How do we do that without negatively impacting forging?

Measuring Performance

  • How can we easily measure performance without negatively impacting the network?

Suggestion to solve the problem differently: Random Delegate Spot

  • Change the spot 51 into a random delegate instead
  • Each delegate voted with at least X amount gets a chance to forge
  • Additional voted ARK will increase the chance to be chose as forger
    Benefits:
  • Not much new concepts needed (other then picking a random standby)
  • Smoother entry for delegates and option to attract "Mini-Delegates"
  • Rewards for standby delegates
  • Automatic health check through forging
  • Already proven to work in other blockchains

[Weekly Digest] Jan 28, 2019 - Feb 3, 2019

Here's the Weekly Digest from Mon, Jan 28, 2019 12:00 AM to Sun, Feb 3, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were 6 issues. Of these, 1 issues have been closed and 5 issues are still open.

Opened

@kristjank

@roks0n

Closed

@kristjank

Pull Requests

Last week, 4 pull-requests were opened, closed or merged.

Opened

Last week, 1 pull-request was opened.

@roks0n

Merged

Last week, 3 pull-requests were merged.

@kristjank

@faustbrian

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@roks0n

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Jan 28, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

[Weekly Digest] Mar 25, 2019 - Mar 31, 2019

Here's the Weekly Digest from Mon, Mar 25, 2019 12:00 AM to Sun, Mar 31, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is closed now.

Closed

@ArkEcosystemBot

Pull Requests

Last week, 1 pull-request was opened, closed or merged.

Opened

Last week, 1 pull-request was opened.

@supaiku0

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@supaiku0

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Mar 25, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

[Weekly Digest] Feb 25, 2019 - Mar 3, 2019

Here's the Weekly Digest from Mon, Feb 25, 2019 12:00 AM to Sun, Mar 3, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there were no issues.

Pull Requests

Last week, 1 pull-request was opened, closed or merged.

Merged

Last week, 1 pull-request was merged.

@j-a-m-l

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@j-a-m-l

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there was 1 stargazer.

@dlecan

You are the star! 🌟


That's all activities since Mon, Feb 25, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP-17 transaction pool

  AIP: 17
  Title: transaction pool
  Authors: fx thoorens , chris
  Status: Done
  Type: Standards Track
  Created: 2018-05-29
  Last Update: 2018-11-29

Abstract

This is the description of transaction pool mechanism

Motivation

In order to manage properly the transaction pool and prevent spam, the rules are described in this document and implemented in ark-core v2

Rationale

Transaction pool rules:

1 - new unverified transaction is received:

  • verify the transaction (using AIP-11 SER/DER), signature
  • check if the txid (the one computed) is already in db -> if yes: reject
  • find the wallets of the recipient and of the sender inside the pool
  • if no wallet, COPY it from the blockchain
  • test wallet.canApply
  • if successful,apply transaction only to sender.

2 - new block added on blockchain

  • find the wallet of delegate in txpool. if found apply the block rewards and fees to the delegate wallet, otherwise do nothing
  • for each transaction
    • if txid in pool: remove tx from pool.
    • else find wallets from sender/recipient
      • if found recipient wallet, apply tx
      • if found sender wallet check canApply.
        • if ok use applyTransaction on this wallet
        • else (ouch: double spending): drop all tx from the sender in the txpool, apply this tx (canApply should be ok otherwise the txpool should be resetted)
        • if sender.apply succesfull
          • check if balance ==0 and no more transactions from sender then delete wallet from wallet Manager

3 - drop transaction (that was already in txpool as per rule 1)

  • revert tx on wallets of sender and recipient. if recipient wallet is empty, remove from txpool

4 - every now and then clean unchanged wallet for over 24 hours or so

5 - apply some limit transactions per sender (configurable, around 50)

Specifications

Technical details or example of implementation

[Weekly Digest] Mar 4, 2019 - Mar 10, 2019

Here's the Weekly Digest from Mon, Mar 4, 2019 12:00 AM to Sun, Mar 10, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is closed now.

Closed

@ArkEcosystemBot

Pull Requests

Last week, 1 pull-request was opened, closed or merged.

Merged

Last week, 1 pull-request was merged.

@supaiku0

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@supaiku0

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Mar 4, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP - Checkpoints to reduce long range attack potential

We should discuss how to reduce the potential harm of long range attacks.

Some regular checkpoints of blocks that are hard-coded in the client could shorten the window of long range attacks to the time frame between the last checkpoint and now.

As checkpoints would most likely have to be included in the core code they would create more centralisation.

We will not solve weak subjectivity. But a more transparent way to agree on the history through checkpoints might be beneficial.

[Weekly Digest] Feb 4, 2019 - Feb 10, 2019

Here's the Weekly Digest from Mon, Feb 4, 2019 12:00 AM to Sun, Feb 10, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is still open.

Opened

@kristjank

Pull Requests

Last week, no pull-requests were opened, closed or merged.

Releases

Last week there were no releases.

Contributors

Last week there were no contributors.

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Feb 4, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP 3: Anonymous Vote

Anonymous vote, you can’t see who voted for you. Would avoid people begging for votes and only making promises. If you can’t know who voted for you, vote swap is dead, you can only focus on actually making contributions, and ask community feedback

[Weekly Digest] Apr 15, 2019 - Apr 21, 2019

Here's the Weekly Digest from Mon, Apr 15, 2019 12:00 AM to Sun, Apr 21, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is closed now.

Closed

@ArkEcosystemBot

Pull Requests

Last week, no pull-requests were opened, closed or merged.

Releases

Last week there were no releases.

Contributors

Last week there were no contributors.

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Apr 15, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP 27: Addressing Long Range Attacks - Discussion

Discussion for: AIP 27

Chris asked that I should separate the long range attack additions that were created for AIP 25 as a result of the open discussion should be made into a new separate AIP so here it is. Let me know your thoughts.

Discussion: AIP-16

We had an extensive discussion on Slack, and was told I should document some of our concerns here. So I will try to do so in order to continue discussion regarding dynamic fees.

My worry is specifically the new feeMultiplier constant that was introduced in this AIP. Everything else in this AIP makes sense, for example it makes sense that a transaction with a full 255 character vendorField be more expensive than a transaction with a blank vendorField.

I have three concerns or arguments against this feeMultiplier, and the concept transactions being dropped due to not having a sufficient fee attached to it:

  1. Most delegates are not going to be motivated to have high fees at all. There will be a race to the bottom as delegates compete against each other and lower their feeMultilpliers to entice voters. So at that point any delegate stupid enough to maintain high fees will simply stop forging transactions and eventually be voted out. So we're already starting at the bottom.

  2. For the end user creating a transaction, there is absolutely no benefit to adding a higher fee than the absolute bare minimum. A user who sets a maximum fee will not have their transaction processed any faster than someone with the minimum fee. So, again, we're at the bottom.

  3. Finally, with the ability for delegates to reject a transaction based on too-small fees, now a user may have to wait up to 6 hours before they find out that their transaction was discarded by the network because their fee was too low. It would be physically impossible to use Ark in an commerce setting because a user wouldn't be able to leave the store with their goods until they found out their transaction was accepted or failed for some reason.

I'm open to any discussion or clarification on any of the points above. I only want the best for the Ark network and its end users, and we want it to be as intuitive as possible.

What we have right now is brilliant. A user sees how much a transaction is going to cost based on the type of transaction, and they don't have to do anything else. Their transaction is accepted within 8 seconds. Bitcoin and Ethereum can't beat that on their best days.

[Weekly Digest] Mar 11, 2019 - Mar 17, 2019

Here's the Weekly Digest from Mon, Mar 11, 2019 12:00 AM to Sun, Mar 17, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is closed now.

Closed

@ArkEcosystemBot

Pull Requests

Last week, no pull-requests were opened, closed or merged.

Releases

Last week there were no releases.

Contributors

Last week there were no contributors.

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Mar 11, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

AIP - Sybil Attack / Exclude Relays from Consensus

I think we should discuss about:

  • Calculating Quorum only be delegate nodes and exclude relays from the calculation
  • Changing Delegate count to a prime number like 53 to avoid network splits
  • Invent an economic model to give back influence on consensus to relays later (if needed)

What do you think?

[Weekly Digest] Apr 22, 2019 - Apr 28, 2019

Here's the Weekly Digest from Mon, Apr 22, 2019 12:00 AM to Sun, Apr 28, 2019 11:59 PM for ArkEcosystem/AIPs.

Issues

Last week there was 1 issue. It is closed now.

Closed

@ArkEcosystemBot

Pull Requests

Last week, 1 pull-request was opened, closed or merged.

Merged

Last week, 1 pull-request was merged.

@faustbrian

Releases

Last week there were no releases.

Contributors

Last week there was 1 contributor.

@faustbrian

Thank you for your contribution! πŸŽ‰

Star Gazers

Last week there were no stargazers.


That's all activities since Mon, Apr 22, 2019 12:00 AM, please Watch and Star the repository ArkEcosystem/AIPs to receive upcoming weekly updates.

You can also view all Weekly Digests by clicking here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.