Skip to content

Instantly share code, notes, and snippets.

@vladbatushkov
Last active June 15, 2020 13:51
Show Gist options
  • Save vladbatushkov/7dc116d44eb2bcb2bdea401a980b12bb to your computer and use it in GitHub Desktop.
Save vladbatushkov/7dc116d44eb2bcb2bdea401a980b12bb to your computer and use it in GitHub Desktop.
blockchain generation script
MATCH (n) DETACH DELETE n;
CREATE (b:Block {hash: 'block1'});
// Coinbase 1
MATCH (b:Block {hash: 'block1'})
CREATE
(i:Input {coinbase: 'coinbase1'}),
(tx:Transaction {id: 'tx1-1'}),
(o:Output {n: 0, value: 11}),
(a:Address {address: 'addr1-1'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT]->(o),
(a)-[:LOCKED]->(o);
// Tx 1-1
MATCH (b:Block {hash: 'block1'})
CREATE
(i1:Input {tx_id: 'tx1-2', vout: 0}),
(i2:Input {tx_id: 'tx3-4', vout: 0}),
(tx:Transaction {id: 'tx1-2'}),
(o1:Output {n: 0, value: 11}),
(o2:Output {n: 1, value: 0.11}),
(a1:Address {address: 'addr1-2'}),
(a2:Address {address: 'addr1-3'})
CREATE
(tx)-[:TX]->(b),
(i1)-[:IN]->(tx),
(i2)-[:IN]->(tx),
(tx)-[:OUT]->(o1),
(tx)-[:OUT]->(o2),
(a1)-[:OUT]->(o1),
(a2)-[:OUT]->(o2);
CREATE (b:Block {hash: 'block2'});
// Coinbase 2
MATCH (b:Block {hash: 'block2'})
CREATE
(i:Input {coinbase: 'coinbase2'}),
(tx:Transaction {id: 'tx2-1'}),
(o:Output {n: 0, value: 22}),
(a:Address {address: 'addr2-1'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT]->(o),
(a)-[:LOCKED]->(o);
// Tx 2-1
MATCH (b:Block {hash: 'block2'})
CREATE
(i:Input {tx_id: 'tx3-2', vout: 0}),
(tx:Transaction {id: 'tx2-2'}),
(o1:Output {n: 0, value: 22}),
(o2:Output {n: 1, value: 0.22}),
(a1:Address {address: 'addr2-2'}),
(a2:Address {address: 'addr2-3'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT]->(o1),
(tx)-[:OUT]->(o2),
(a1)-[:OUT]->(o1),
(a2)-[:OUT]->(o2);
// Merge
MATCH (tx:Transaction {id: 'tx2-2'})-[:OUT]->(o:Output {n: 0}), (i:Input {tx_id: 'tx1-2'})
MERGE (o)-[:UNLOCK]->(i);
CREATE (b:Block {hash: 'block3'});
// Coinbase 3
MATCH (b:Block {hash: 'block3'})
CREATE
(i:Input {coinbase: 'coinbase3'}),
(tx:Transaction {id: 'tx3-1'}),
(o:Output {n: 0, value: 33}),
(a:Address {address: 'addr3-1'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT {}]->(o),
(a)-[:LOCKED]->(o);
// Tx 3-1
MATCH (b:Block {hash: 'block3'})
CREATE
(i:Input {tx_id: 'tx4-2', vout: 0}),
(tx:Transaction {id: 'tx3-2'}),
(o1:Output {n: 0, value: 33}),
(o2:Output {n: 1, value: 0.33}),
(a1:Address {address: 'addr3-2'}),
(a2:Address {address: 'addr3-3'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT]->(o1),
(tx)-[:OUT]->(o2),
(a1)-[:OUT]->(o1),
(a2)-[:OUT]->(o2);
// Tx 3-2
MATCH (b:Block {hash: 'block3'})
CREATE
(i:Input {tx_id: 'tx4-2', vout: 0}),
(tx:Transaction {id: 'tx3-3'}),
(o1:Output {n: 0, value: 33}),
(o2:Output {n: 1, value: 0.33}),
(a1:Address {address: 'addr3-4'}),
(a2:Address {address: 'addr3-5'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT]->(o1),
(tx)-[:OUT]->(o2),
(a1)-[:OUT]->(o1),
(a2)-[:OUT]->(o2);
MATCH (b:Block {hash: 'block3'})
CREATE
(i1:Input {tx_id: 'tx4-2', vout: 0}),
(i2:Input {tx_id: 'tx4-4', vout: 0}),
(tx:Transaction {id: 'tx3-4'}),
(o1:Output {n: 0, value: 333}),
(o2:Output {n: 1, value: 0.333}),
(a1:Address {address: 'addr3-6'}),
(a2:Address {address: 'addr3-7'})
CREATE
(tx)-[:TX]->(b),
(i1)-[:IN]->(tx),
(i2)-[:IN]->(tx),
(tx)-[:OUT]->(o1),
(tx)-[:OUT]->(o2),
(a1)-[:OUT]->(o1),
(a2)-[:OUT]->(o2);
// Merge
MATCH (tx:Transaction {id: 'tx3-2'})-[:OUT]->(o:Output {n: 0}), (i:Input {tx_id: 'tx3-2'})
MERGE (o)-[:UNLOCK]->(i);
MATCH (tx:Transaction {id: 'tx3-4'})-[:OUT]->(o:Output {n: 0}), (i:Input {tx_id: 'tx1-2'})
MERGE (o)-[:UNLOCK]->(i);
// Block 4
CREATE (b:Block {hash: 'block4'});
// Coinbase 3
MATCH (b:Block {hash: 'block4'})
CREATE
(i:Input {coinbase: 'coinbase4'}),
(tx:Transaction {id: 'tx4-1'}),
(o:Output {n: 0, value: 44}),
(a:Address {address: 'addr4-1'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT {}]->(o),
(a)-[:LOCKED]->(o);
// Tx4-1
MATCH (b:Block {hash: 'block4'})
CREATE
(i:Inpu {tx_id: 'tx5-2', vout: 0}),
(tx:Transaction {id: 'tx4-2'}),
(o1:Output {n: 0, value: 44}),
(o2:Output {n: 1, value: 0.44}),
(a1:Address {address: 'addr4-2'}),
(a2:Address {address: 'addr4-3'})
CREATE
(tx)-[:TX]->(b),
(i)-[:IN]->(tx),
(tx)-[:OUT]->(o1),
(tx)-[:OUT]->(o2),
(a1)-[:OUT]->(o1),
(a2)-[:OUT]->(o2);
MATCH (:Transaction {id: 'tx4-2'})-[:OUT]->(o:Output {n: 0}), (i:Input {tx_id: 'tx4-2'})
MERGE (o)-[:UNLOCK]->(i);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment