Skip to content

New BSIP: Allow arbitrary data in blocks and transactions #220

@abitmore

Description

@abitmore

Motivation and Rationale

Arbitrary data in blocks can be used to analyze which blocks are signed by which node software and what versions. For example, a bitcoin miner can put a short string in the coinbase transaction of a new block, which may contain useful data for analysis.

Similarly, arbitrary data in signed transactions can be used to track which transactions are signed by which client software and what versions. This topic was brought up recently in discussions about workers when debating how to evaluate a GUI worker's performance e.g. how many users are using the worker's product(s) and how much fee the users contributed to the network.

Although tracking (of client apps) can be done by client apps adding a custom operation in each transaction, it has the disadvantage that it would pollute the account history.

Another option for tracking (of client apps) is to make use of data fields which would be added by #185, however it is on the layer of operations thus is not as good. For example, Steem has a json_metadata field in comment_operation so it can be used to track data about posting (see https://steemd.com/tx/fc71ea90002a68083d78faec78380a581ad4694d), but other operations e.g. vote or transfer doesn't have such a field so less data can be used for analysis.

Implementation

We can add an optional field to extensions of block_header class as well as transaction class.

Discussion

Pros and cons about exposing version data was discussed in #120. This document mainly focuses on adding arbitrary data which is not necessarily soft versions, but not for forcing the node operators to publish special data, nor for applying special chain logic (aka hard fork) around the data.

See Also

Metadata

Metadata

Assignees

No one assigned

    Labels

    chain utilityMake use of the blockchain

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions