tool-db 2.0.2 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/bundle.js +1 -109743
  2. package/dist/chain/Block.d.ts +16 -8
  3. package/dist/chain/Block.js +81 -20
  4. package/dist/chain/Block.js.map +1 -1
  5. package/dist/chain/ToolChain.d.ts +18 -3
  6. package/dist/chain/ToolChain.js +191 -24
  7. package/dist/chain/ToolChain.js.map +1 -1
  8. package/dist/chain/Tx.d.ts +46 -30
  9. package/dist/chain/Tx.js +47 -104
  10. package/dist/chain/Tx.js.map +1 -1
  11. package/dist/chain/isValidChain.d.ts +1 -2
  12. package/dist/chain/isValidChain.js +24 -7
  13. package/dist/chain/isValidChain.js.map +1 -1
  14. package/dist/index.d.ts +4 -2
  15. package/dist/index.js +9 -5
  16. package/dist/index.js.map +1 -1
  17. package/{test-verify-a/000182.log → dist/infuraFilecoin.d.ts} +0 -0
  18. package/dist/infuraFilecoin.js +2 -0
  19. package/dist/infuraFilecoin.js.map +1 -0
  20. package/dist/makeTx.d.ts +1 -0
  21. package/dist/makeTx.js +27 -0
  22. package/dist/makeTx.js.map +1 -0
  23. package/dist/messageHandlers/handleCrdtGet.js +7 -12
  24. package/dist/messageHandlers/handleCrdtGet.js.map +1 -1
  25. package/dist/messageHandlers/handleCrdtPut.js +32 -16
  26. package/dist/messageHandlers/handleCrdtPut.js.map +1 -1
  27. package/dist/messageHandlers/handleGet.js +6 -12
  28. package/dist/messageHandlers/handleGet.js.map +1 -1
  29. package/dist/messageHandlers/handleJoin.js +1 -1
  30. package/dist/messageHandlers/handleJoin.js.map +1 -1
  31. package/dist/messageHandlers/handlePut.js +13 -22
  32. package/dist/messageHandlers/handlePut.js.map +1 -1
  33. package/dist/messageHandlers/handleServers.js +1 -1
  34. package/dist/messageHandlers/handleServers.js.map +1 -1
  35. package/dist/messageHandlers/handleSubscribe.js +14 -14
  36. package/dist/messageHandlers/handleSubscribe.js.map +1 -1
  37. package/dist/test.d.ts +1 -0
  38. package/dist/test.js +17 -0
  39. package/dist/test.js.map +1 -0
  40. package/dist/toolChainServer.d.ts +8 -0
  41. package/dist/toolChainServer.js +60 -0
  42. package/dist/toolChainServer.js.map +1 -0
  43. package/dist/toolDbAnonSignIn.js +1 -1
  44. package/dist/toolDbAnonSignIn.js.map +1 -1
  45. package/dist/toolDbClientOnMessage.js +3 -1
  46. package/dist/toolDbClientOnMessage.js.map +1 -1
  47. package/dist/toolDbCrdtGet.js +3 -1
  48. package/dist/toolDbCrdtGet.js.map +1 -1
  49. package/dist/toolDbCrdtPut.js +7 -12
  50. package/dist/toolDbCrdtPut.js.map +1 -1
  51. package/dist/toolDbGet.js +5 -2
  52. package/dist/toolDbGet.js.map +1 -1
  53. package/dist/toolDbKeysSignIn.js +1 -1
  54. package/dist/toolDbKeysSignIn.js.map +1 -1
  55. package/dist/toolDbNetwork.js +4 -4
  56. package/dist/toolDbNetwork.js.map +1 -1
  57. package/dist/toolDbPut.js +7 -12
  58. package/dist/toolDbPut.js.map +1 -1
  59. package/dist/toolDbSignIn.js +10 -16
  60. package/dist/toolDbSignIn.js.map +1 -1
  61. package/dist/toolDbSignUp.js +33 -52
  62. package/dist/toolDbSignUp.js.map +1 -1
  63. package/dist/toolDbVerificationWrapper.d.ts +2 -2
  64. package/dist/toolDbVerificationWrapper.js.map +1 -1
  65. package/dist/toolchain.d.ts +1 -0
  66. package/dist/toolchain.js +8 -0
  67. package/dist/toolchain.js.map +1 -0
  68. package/dist/tooldb.d.ts +14 -10
  69. package/dist/tooldb.js +24 -5
  70. package/dist/tooldb.js.map +1 -1
  71. package/dist/types/message.d.ts +8 -6
  72. package/dist/types/message.js.map +1 -1
  73. package/dist/types/tooldb.d.ts +0 -19
  74. package/dist/utils/verifyMessage.js +3 -2
  75. package/dist/utils/verifyMessage.js.map +1 -1
  76. package/dist/utils/verifyPeer.d.ts +2 -2
  77. package/dist/utils/verifyPeer.js +2 -2
  78. package/dist/utils/verifyPeer.js.map +1 -1
  79. package/package.json +5 -5
  80. package/test-alice/000425.ldb +0 -0
  81. package/test-alice/000427.ldb +0 -0
  82. package/test-alice/000430.ldb +0 -0
  83. package/test-alice/000431.log +0 -0
  84. package/test-alice/CURRENT +1 -1
  85. package/test-alice/LOG +5 -5
  86. package/test-alice/LOG.old +5 -5
  87. package/test-alice/MANIFEST-000429 +0 -0
  88. package/test-alice-speed/000236.log +0 -0
  89. package/test-alice-speed/000237.ldb +0 -0
  90. package/test-alice-speed/CURRENT +1 -1
  91. package/test-alice-speed/LOG +14 -5
  92. package/test-alice-speed/LOG.old +5 -14
  93. package/test-alice-speed/MANIFEST-000234 +0 -0
  94. package/test-bob/000425.ldb +0 -0
  95. package/test-bob/000427.ldb +0 -0
  96. package/test-bob/000430.ldb +0 -0
  97. package/test-bob/000431.log +0 -0
  98. package/test-bob/CURRENT +1 -1
  99. package/test-bob/LOG +5 -5
  100. package/test-bob/LOG.old +5 -5
  101. package/test-bob/MANIFEST-000429 +0 -0
  102. package/test-node-a/000425.ldb +0 -0
  103. package/test-node-a/000427.ldb +0 -0
  104. package/test-node-a/000430.ldb +0 -0
  105. package/test-node-a/000431.log +0 -0
  106. package/test-node-a/CURRENT +1 -1
  107. package/test-node-a/LOG +5 -5
  108. package/test-node-a/LOG.old +5 -5
  109. package/test-node-a/MANIFEST-000429 +0 -0
  110. package/test-node-b/000425.ldb +0 -0
  111. package/test-node-b/000427.ldb +0 -0
  112. package/test-node-b/000430.ldb +0 -0
  113. package/test-node-b/000431.log +0 -0
  114. package/test-node-b/CURRENT +1 -1
  115. package/test-node-b/LOG +5 -5
  116. package/test-node-b/LOG.old +5 -5
  117. package/test-node-b/MANIFEST-000429 +0 -0
  118. package/test-verify-a/000212.log +0 -0
  119. package/test-verify-a/CURRENT +1 -1
  120. package/test-verify-a/LOG +3 -3
  121. package/test-verify-a/LOG.old +3 -3
  122. package/test-verify-a/{MANIFEST-000181 → MANIFEST-000211} +0 -0
  123. package/pvutils-tests-replacement.js +0 -777
  124. package/test-alice/000269.ldb +0 -0
  125. package/test-alice/000271.ldb +0 -0
  126. package/test-alice/000274.ldb +0 -0
  127. package/test-alice/000277.ldb +0 -0
  128. package/test-alice/000278.log +0 -0
  129. package/test-alice/MANIFEST-000276 +0 -0
  130. package/test-alice-speed/000185.ldb +0 -0
  131. package/test-alice-speed/000187.ldb +0 -0
  132. package/test-alice-speed/000188.log +0 -0
  133. package/test-alice-speed/MANIFEST-000186 +0 -0
  134. package/test-bob/000269.ldb +0 -0
  135. package/test-bob/000271.ldb +0 -0
  136. package/test-bob/000274.ldb +0 -0
  137. package/test-bob/000277.ldb +0 -0
  138. package/test-bob/000278.log +0 -0
  139. package/test-bob/MANIFEST-000276 +0 -0
  140. package/test-node-a/000269.ldb +0 -0
  141. package/test-node-a/000271.ldb +0 -0
  142. package/test-node-a/000274.ldb +0 -0
  143. package/test-node-a/000277.ldb +0 -0
  144. package/test-node-a/000278.log +0 -0
  145. package/test-node-a/MANIFEST-000276 +0 -0
  146. package/test-node-b/000269.ldb +0 -0
  147. package/test-node-b/000271.ldb +0 -0
  148. package/test-node-b/000274.ldb +0 -0
  149. package/test-node-b/000277.ldb +0 -0
  150. package/test-node-b/000278.log +0 -0
  151. package/test-node-b/MANIFEST-000276 +0 -0
@@ -1,21 +1,29 @@
1
- import { TxJson } from "./Tx";
2
- export declare type BlockData = TxJson[];
1
+ import { Transactions } from "./Tx";
2
+ export declare type BlockData = Transactions[];
3
+ export declare function decodeBlock(encoded: string): Block;
3
4
  export default class Block {
4
5
  private _timestamp;
5
6
  private _lastHash;
6
7
  private _hash;
7
8
  private _data;
8
- private _validator;
9
- private _signature;
10
- constructor(timestamp: number, lastHash: string, hash: string, data: BlockData, validator: string, signature: string);
11
- toString(): string;
9
+ private _height;
10
+ private _merkleRoot;
11
+ private _nonce;
12
+ private _difficulty;
13
+ constructor(height: number, timestamp: number, lastHash: string, data: BlockData, nonce: number, difficulty: string);
14
+ encode(): string;
12
15
  get hash(): string;
16
+ get merkleRoot(): string;
17
+ get height(): number;
13
18
  get lastHash(): string;
14
19
  get timestamp(): number;
15
20
  get data(): BlockData;
21
+ get nonce(): number;
22
+ set nonce(n: number);
23
+ get difficulty(): string;
16
24
  static genesis(): Block;
17
- static hash(timestamp: number, lastHash: string, data: BlockData): string;
25
+ static merkleRoot(block: Block): any;
18
26
  static blockHash(block: Block): string;
19
- static createBlock(lastBlock: Block, data: BlockData): Block;
27
+ static verifyBlockNonce(block: Block): boolean;
20
28
  static verifyBlockData(block: Block): boolean;
21
29
  }
@@ -3,23 +3,40 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decodeBlock = void 0;
6
7
  var __1 = require("..");
7
8
  var web3_1 = __importDefault(require("web3"));
9
+ var bn_js_1 = __importDefault(require("bn.js"));
10
+ var merkletreejs_1 = require("merkletreejs");
8
11
  var getTimestamp_1 = __importDefault(require("../utils/getTimestamp"));
9
12
  var web3 = new web3_1.default(web3_1.default.givenProvider);
13
+ function decodeBlock(encoded) {
14
+ var arr = JSON.parse(encoded);
15
+ return new Block(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]);
16
+ }
17
+ exports.decodeBlock = decodeBlock;
10
18
  var Block = /** @class */ (function () {
11
- function Block(timestamp, lastHash, hash, data, validator, signature) {
19
+ function Block(height, timestamp, lastHash, data, nonce, difficulty) {
12
20
  this._timestamp = (0, getTimestamp_1.default)();
13
21
  this._data = [];
22
+ this._height = height;
14
23
  this._timestamp = timestamp;
15
24
  this._lastHash = lastHash;
16
- this._hash = hash;
17
25
  this._data = data;
18
- this._validator = validator;
19
- this._signature = signature;
26
+ this._nonce = nonce;
27
+ this._difficulty = difficulty;
28
+ this._merkleRoot = Block.merkleRoot(this);
29
+ this._hash = Block.blockHash(this);
20
30
  }
21
- Block.prototype.toString = function () {
22
- return "Block - \n Timestamp : " + this._timestamp + "\n Last Hash : " + this._lastHash + "\n Hash : " + this._hash + "\n Data : " + this._data + "\n Validator : " + this._validator + "\n Signature : " + this._signature;
31
+ Block.prototype.encode = function () {
32
+ return JSON.stringify([
33
+ this._height,
34
+ this._timestamp,
35
+ this._lastHash,
36
+ this._data,
37
+ this._nonce,
38
+ this._difficulty,
39
+ ]);
23
40
  };
24
41
  Object.defineProperty(Block.prototype, "hash", {
25
42
  get: function () {
@@ -28,6 +45,20 @@ var Block = /** @class */ (function () {
28
45
  enumerable: false,
29
46
  configurable: true
30
47
  });
48
+ Object.defineProperty(Block.prototype, "merkleRoot", {
49
+ get: function () {
50
+ return this._merkleRoot;
51
+ },
52
+ enumerable: false,
53
+ configurable: true
54
+ });
55
+ Object.defineProperty(Block.prototype, "height", {
56
+ get: function () {
57
+ return this._height;
58
+ },
59
+ enumerable: false,
60
+ configurable: true
61
+ });
31
62
  Object.defineProperty(Block.prototype, "lastHash", {
32
63
  get: function () {
33
64
  return this._lastHash;
@@ -49,31 +80,61 @@ var Block = /** @class */ (function () {
49
80
  enumerable: false,
50
81
  configurable: true
51
82
  });
83
+ Object.defineProperty(Block.prototype, "nonce", {
84
+ get: function () {
85
+ return this._nonce;
86
+ },
87
+ set: function (n) {
88
+ this._nonce = n;
89
+ this._timestamp = (0, getTimestamp_1.default)();
90
+ this._hash = Block.blockHash(this);
91
+ },
92
+ enumerable: false,
93
+ configurable: true
94
+ });
95
+ Object.defineProperty(Block.prototype, "difficulty", {
96
+ get: function () {
97
+ return this._difficulty;
98
+ },
99
+ enumerable: false,
100
+ configurable: true
101
+ });
52
102
  Block.genesis = function () {
53
- return new this((0, getTimestamp_1.default)(), "0", "0", [], "0", "0");
103
+ var ffff = new bn_js_1.default("ffff", "hex");
104
+ var _2_254 = new bn_js_1.default(2, "le").pow(new bn_js_1.default(224, "le"));
105
+ var offset = ffff.mul(_2_254).div(new bn_js_1.default(1, "le")).div(new bn_js_1.default(2, "le"));
106
+ return new this(0, (0, getTimestamp_1.default)(), "000000000000000000000000000000000000000000000000000000000000000000000000000000", [], 0, offset.toString(16));
54
107
  };
55
- Block.hash = function (timestamp, lastHash, data) {
56
- // data should be a merkle root of all tx!
57
- return (0, __1.sha256)("" + timestamp + lastHash + JSON.stringify(data)).toString();
108
+ Block.merkleRoot = function (block) {
109
+ var data = block.data;
110
+ var leaves = data.map(function (v) { return v.id; });
111
+ var tree = new merkletreejs_1.MerkleTree(leaves, __1.sha256);
112
+ var root = tree.getRoot().toString("hex");
113
+ return root;
58
114
  };
59
115
  Block.blockHash = function (block) {
60
- var timestamp = block.timestamp, lastHash = block.lastHash, data = block.data;
61
- return Block.hash(timestamp, lastHash, data);
116
+ var height = block.height, nonce = block.nonce, merkleRoot = block.merkleRoot;
117
+ return (0, __1.sha256)("" + nonce + height + merkleRoot).toString();
62
118
  };
63
- Block.createBlock = function (lastBlock, data) {
64
- var lastHash = lastBlock.hash;
65
- var time = (0, getTimestamp_1.default)();
66
- var hash = Block.hash(time, lastHash, data);
67
- return new this(time, lastHash, hash, data, "0", "0");
119
+ Block.verifyBlockNonce = function (block) {
120
+ var isValid = true;
121
+ var hashAsNumber = new bn_js_1.default(block.hash, "hex");
122
+ var difficulty = new bn_js_1.default(block.difficulty, "hex");
123
+ if (hashAsNumber.gte(difficulty))
124
+ isValid = false;
125
+ return isValid;
68
126
  };
69
127
  Block.verifyBlockData = function (block) {
70
128
  var isValid = true;
71
129
  block.data.forEach(function (tx) {
72
- var verify = web3.eth.accounts.recover(tx.txid, tx.sig);
73
- if (verify !== tx.from)
130
+ var verify = web3.eth.accounts.recover(tx.adress, tx.sig);
131
+ if (verify !== tx.adress)
74
132
  isValid = false;
75
133
  });
76
- return isValid;
134
+ var hash = Block.blockHash(block);
135
+ if (hash !== block.hash)
136
+ isValid = false;
137
+ return Block.verifyBlockNonce(block);
77
138
  };
78
139
  return Block;
79
140
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"Block.js","sourceRoot":"","sources":["../../src/chain/Block.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Block.js","sourceRoot":"","sources":["../../src/chain/Block.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,27 @@
1
1
  import Block from "./Block";
2
+ import { Transactions } from "./Tx";
2
3
  export default class ToolChain {
3
4
  private _chain;
5
+ private _noncesState;
4
6
  private _balancesState;
7
+ private _namesState;
8
+ private _dataState;
9
+ mempool: Record<string, Transactions>;
5
10
  private _lastBlockCalculated;
6
- constructor();
11
+ private _noncetest;
12
+ constructor(enableMiner: boolean);
13
+ /**
14
+ * Simple loop to mine new blocks
15
+ * This is not meant for real world usage!
16
+ */
17
+ mineLoop(): void;
7
18
  calculateState(): Record<string, number>;
8
19
  get balances(): Record<string, number>;
9
- pushBlock(block: Block): false | Block;
10
- replaceChain(newChain: Block[]): void;
20
+ get names(): Record<string, string>;
21
+ get datas(): Record<string, any>;
22
+ get nonces(): Record<string, number>;
23
+ calculateNewDifficulty(): string;
24
+ pushBlock(block: Block): boolean;
25
+ replaceChain(newChain: string[]): void;
11
26
  isValidBlock(block: Block): boolean;
12
27
  }
@@ -1,30 +1,123 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
2
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
23
  };
5
24
  Object.defineProperty(exports, "__esModule", { value: true });
6
- var Block_1 = __importDefault(require("./Block"));
25
+ var Block_1 = __importStar(require("./Block"));
7
26
  var isValidChain_1 = __importDefault(require("./isValidChain"));
8
- var Tx_1 = __importDefault(require("./Tx"));
27
+ var bn_js_1 = __importDefault(require("bn.js"));
28
+ var getTimestamp_1 = __importDefault(require("../utils/getTimestamp"));
29
+ function sortTxs(a, b) {
30
+ if (a.adress === b.adress) {
31
+ if (a.nonce > b.nonce)
32
+ return -1;
33
+ if (a.nonce < b.nonce)
34
+ return 1;
35
+ return 0;
36
+ }
37
+ if (a.timestamp < b.timestamp)
38
+ return -1;
39
+ if (a.timestamp > b.timestamp)
40
+ return 1;
41
+ return 0;
42
+ }
9
43
  var ToolChain = /** @class */ (function () {
10
- function ToolChain() {
44
+ function ToolChain(enableMiner) {
45
+ var _this = this;
11
46
  this._chain = [];
47
+ this._noncesState = {};
12
48
  this._balancesState = {};
49
+ this._namesState = {};
50
+ this._dataState = {};
51
+ this.mempool = {};
13
52
  this._lastBlockCalculated = 0;
14
- this._chain = [Block_1.default.genesis()];
53
+ this._noncetest = 0;
54
+ this._chain = [Block_1.default.genesis().encode()];
55
+ console.log((0, Block_1.decodeBlock)(this._chain[this._chain.length - 1]).difficulty);
56
+ if (enableMiner) {
57
+ // give it 10ms to breathe..
58
+ setInterval(function () {
59
+ _this.mineLoop();
60
+ }, 10);
61
+ }
15
62
  }
63
+ /**
64
+ * Simple loop to mine new blocks
65
+ * This is not meant for real world usage!
66
+ */
67
+ ToolChain.prototype.mineLoop = function () {
68
+ var lastBlock = (0, Block_1.decodeBlock)(this._chain[this._chain.length - 1]);
69
+ var difficulty = this.calculateNewDifficulty();
70
+ console.log("nonce:", this._noncetest);
71
+ var block = new Block_1.default(this._chain.length, new Date().getTime(), lastBlock.hash, Object.values(this.mempool), this._noncetest, difficulty);
72
+ for (var i = 0; i < 1000000; i += 1) {
73
+ this._noncetest += 1;
74
+ block.nonce = this._noncetest;
75
+ if (Block_1.default.verifyBlockNonce(block)) {
76
+ console.log("Time elapsed: " +
77
+ (block.timestamp - lastBlock.timestamp) / 1000 +
78
+ " seconds");
79
+ console.log("New block: ", {
80
+ height: block.height,
81
+ hash: block.hash,
82
+ nonce: block.nonce,
83
+ timestamp: block.timestamp,
84
+ data: block.data,
85
+ merkle: block.merkleRoot,
86
+ difficulty: block.difficulty,
87
+ });
88
+ this._chain.push(block.encode());
89
+ this.calculateState();
90
+ i = 10000000;
91
+ this._noncetest = 0;
92
+ }
93
+ }
94
+ };
16
95
  ToolChain.prototype.calculateState = function () {
17
96
  var _this = this;
18
97
  this._chain.slice(this._lastBlockCalculated).forEach(function (block) {
19
- block.data.sort(Tx_1.default.sortTxJson).forEach(function (tx) {
20
- if (_this._balancesState[tx.from]) {
21
- _this._balancesState[tx.from] -= tx.amount;
98
+ var blockObj = (0, Block_1.decodeBlock)(block);
99
+ blockObj.data.sort(sortTxs).forEach(function (tx) {
100
+ _this._noncesState[tx.adress] = tx.nonce;
101
+ if (_this.mempool[tx.id]) {
102
+ delete _this.mempool[tx.id];
22
103
  }
23
- if (_this._balancesState[tx.to]) {
24
- _this._balancesState[tx.to] += tx.amount;
104
+ if (tx.type === "tx") {
105
+ if (_this._balancesState[tx.adress]) {
106
+ _this._balancesState[tx.adress] -= tx.amount;
107
+ _this._balancesState[tx.adress] -= tx.fee;
108
+ }
109
+ if (_this._balancesState[tx.to]) {
110
+ _this._balancesState[tx.to] += tx.amount;
111
+ }
112
+ else {
113
+ _this._balancesState[tx.to] = tx.amount;
114
+ }
25
115
  }
26
- else {
27
- _this._balancesState[tx.to] = tx.amount;
116
+ if (tx.type === "name") {
117
+ _this._namesState[tx.name] = tx.adress;
118
+ }
119
+ if (tx.type === "put") {
120
+ _this._dataState[tx.key] = tx.data;
28
121
  }
29
122
  });
30
123
  });
@@ -38,11 +131,91 @@ var ToolChain = /** @class */ (function () {
38
131
  enumerable: false,
39
132
  configurable: true
40
133
  });
134
+ Object.defineProperty(ToolChain.prototype, "names", {
135
+ get: function () {
136
+ return this._namesState;
137
+ },
138
+ enumerable: false,
139
+ configurable: true
140
+ });
141
+ Object.defineProperty(ToolChain.prototype, "datas", {
142
+ get: function () {
143
+ return this._dataState;
144
+ },
145
+ enumerable: false,
146
+ configurable: true
147
+ });
148
+ Object.defineProperty(ToolChain.prototype, "nonces", {
149
+ get: function () {
150
+ return this._noncesState;
151
+ },
152
+ enumerable: false,
153
+ configurable: true
154
+ });
155
+ ToolChain.prototype.calculateNewDifficulty = function () {
156
+ // 1440 block per adjustment (aprox 24hs)
157
+ var EPOCH = 1440;
158
+ // Each block should be mined every 60 seconds
159
+ var BLOCK_TIME = 60 * 1000;
160
+ // Adapt POW after 10 minutes
161
+ var ADAPTIVE_POW_TIME = BLOCK_TIME * 10;
162
+ // Get the first block in this epoch, with new difficulty
163
+ var initBlockN = this._chain.length - 1 - ((this._chain.length - 1) % EPOCH);
164
+ var initBlock = (0, Block_1.decodeBlock)(this._chain[initBlockN]);
165
+ // Difficulty of the epoch
166
+ var currentDifficulty = initBlock.difficulty;
167
+ // Last block timestamp
168
+ var lastTime = (0, Block_1.decodeBlock)(this._chain[this._chain.length - 1]).timestamp;
169
+ // Get the multiplier
170
+ var elapsed = lastTime - initBlock.timestamp;
171
+ var adjustment = (BLOCK_TIME * EPOCH) / elapsed;
172
+ console.warn("Avg block every " + Math.round(elapsed / EPOCH / 1000) + " seconds");
173
+ // Dont divide by zero
174
+ if (elapsed === 0)
175
+ return currentDifficulty;
176
+ // Convert to hex
177
+ var currentDiffBn = new bn_js_1.default(currentDifficulty, "hex");
178
+ var adjustmentBn = new bn_js_1.default(adjustment, "le");
179
+ var newDiff = currentDiffBn.div(adjustmentBn);
180
+ /**
181
+ * Adaptive proof of work
182
+ * This will fix the instance in which a poweful miner, or a group of miners
183
+ * leave the network, either by a diff stranding attack or just coincidence.
184
+ * The difficulty will decreased based on the delay there is to create a new block
185
+ * Every "APoW time" after the last block will cause the difficulty to drop 50%
186
+ * The APoW time should be a lot more than the average block time, 10x should be good
187
+ */
188
+ var apowValue = Math.floor(((0, getTimestamp_1.default)() - lastTime) / ADAPTIVE_POW_TIME);
189
+ if (apowValue > 0) {
190
+ // Adaptive POW adjustment
191
+ var _2Bn = new bn_js_1.default(2, "le");
192
+ // Divide by 2 for each factor of apow
193
+ // over 10 mins = x / 2
194
+ // over 20 mins = x / 2 / 2
195
+ // over 30 mins = x / 2 / 2 / 2 (etc)
196
+ for (var ii = 0; ii < apowValue; ii += 1) {
197
+ newDiff = newDiff.div(_2Bn);
198
+ }
199
+ }
200
+ var newDiffHex = newDiff.toString(16);
201
+ if (apowValue > 0) {
202
+ console.warn("APoW triggered: x", apowValue);
203
+ console.warn("Base adjustment multiplier:", adjustment);
204
+ }
205
+ if (this._chain.length % EPOCH === 0) {
206
+ console.warn("elapsed:", elapsed, "Avg block found in " + Math.round(elapsed / EPOCH / 1000) + " seconds");
207
+ console.warn("Adjustment multiplier:", adjustment);
208
+ }
209
+ // Recalculate difficulty for every 1440th block (one epoch) or if apow is triggered
210
+ return this._chain.length % EPOCH === 0 || apowValue > 0
211
+ ? newDiffHex
212
+ : currentDifficulty;
213
+ };
41
214
  ToolChain.prototype.pushBlock = function (block) {
42
215
  if (this.isValidBlock(block)) {
43
- this._chain.push(block);
216
+ this._chain.push(block.encode());
44
217
  this.calculateState();
45
- return block;
218
+ return true;
46
219
  }
47
220
  return false;
48
221
  };
@@ -58,22 +231,16 @@ var ToolChain = /** @class */ (function () {
58
231
  console.log("Replacing the current chain with new chain");
59
232
  this._chain = newChain;
60
233
  };
61
- // getLeader() {
62
- // return this._stakes.getMax(this._validators.list);
63
- // }
64
234
  ToolChain.prototype.isValidBlock = function (block) {
65
- var lastBlock = this._chain[this._chain.length - 1];
235
+ var lastBlock = (0, Block_1.decodeBlock)(this._chain[this._chain.length - 1]);
66
236
  /**
67
237
  * check hash
68
238
  * check last hash
69
- * check signature
70
- * check leader
239
+ * check signatures
71
240
  */
72
- if (block.lastHash === lastBlock.hash &&
73
- block.hash === Block_1.default.blockHash(block) &&
74
- Block_1.default.verifyBlockData(block)
75
- // Block.verifyLeader(block, this.getLeader())
76
- ) {
241
+ if (block.height === lastBlock.height + 1 &&
242
+ block.lastHash === lastBlock.hash &&
243
+ Block_1.default.verifyBlockData(block)) {
77
244
  return true;
78
245
  }
79
246
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"ToolChain.js","sourceRoot":"","sources":["../../src/chain/ToolChain.ts"],"names":[],"mappings":";;;;;AAAA,kDAA2C;AAC3C,gEAA0C;AAC1C,4CAAsB;AAEtB;IAME;QALQ,WAAM,GAAY,EAAE,CAAC;QAErB,mBAAc,GAA2B,EAAE,CAAC;QAC5C,yBAAoB,GAAW,CAAC,CAAC;QAGvC,IAAI,CAAC,MAAM,GAAG,CAAC,eAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,kCAAc,GAAd;QAAA,iBAiBC;QAhBC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;YACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE;gBACxC,IAAI,KAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBAChC,KAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;iBAC3C;gBACD,IAAI,KAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oBAC9B,KAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;iBACzC;qBAAM;oBACL,KAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;iBACxC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAE/C,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,sBAAI,+BAAQ;aAAZ;YACE,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;;;OAAA;IAED,6BAAS,GAAT,UAAU,KAAY;QACpB,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;SACd;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gCAAY,GAAZ,UAAa,QAAiB;QAC5B,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACzC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACnE,OAAO;SACR;aAAM,IAAI,CAAC,IAAA,sBAAY,EAAC,QAAQ,CAAC,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO;SACR;QAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED,gBAAgB;IAChB,uDAAuD;IACvD,IAAI;IAEJ,gCAAY,GAAZ,UAAa,KAAY;QACvB,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD;;;;;WAKG;QACH,IACE,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,IAAI;YACjC,KAAK,CAAC,IAAI,KAAK,eAAK,CAAC,SAAS,CAAC,KAAK,CAAC;YACrC,eAAK,CAAC,eAAe,CAAC,KAAK,CAAC;QAC5B,8CAA8C;UAC9C;YACA,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IACH,gBAAC;AAAD,CAAC,AA9ED,IA8EC"}
1
+ {"version":3,"file":"ToolChain.js","sourceRoot":"","sources":["../../src/chain/ToolChain.ts"],"names":[],"mappings":"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"}
@@ -1,34 +1,50 @@
1
- import { Account } from "web3-core";
2
- export interface TxJson {
3
- from: string;
4
- to: string;
1
+ import ToolChain from "./ToolChain";
2
+ declare type TxType = "tx" | "put" | "name";
3
+ export interface TxBase {
5
4
  timestamp: number;
6
- amount: number;
7
- nonce: number;
8
- datahash: string;
9
- txid: string;
5
+ type: TxType;
6
+ /**
7
+ * Adress that sent the transaction, owner
8
+ */
9
+ adress: string;
10
+ /**
11
+ * ID/Hash, should be unique per transaction (a hash of the owner + timestamp + type)
12
+ */
13
+ id: string;
14
+ /**
15
+ * Signature of the id, signed by the owner
16
+ */
10
17
  sig: string;
18
+ /**
19
+ * Nonce, or ordinal number of transaction for this adress
20
+ */
21
+ nonce: number;
22
+ /**
23
+ * Amount of tokens for the miner
24
+ */
25
+ fee: number;
26
+ }
27
+ export interface TxSend extends TxBase {
28
+ type: "tx";
29
+ to: string;
30
+ amount: number;
31
+ }
32
+ export interface TxPut extends TxBase {
33
+ type: "put";
34
+ key: string;
35
+ data: any;
11
36
  }
12
- export default class Tx {
13
- private _timestamp;
14
- private _txid;
15
- private _datahash;
16
- private _nonce;
17
- private _data;
18
- private _signature;
19
- private _sender;
20
- private _receiver;
21
- private _ammount;
22
- constructor(from: Account, to: string, data: string, ammount: number);
23
- get timestamp(): number;
24
- get ammount(): number;
25
- get data(): string;
26
- get sender(): string;
27
- get receiver(): string;
28
- get verify(): string;
29
- get txid(): string;
30
- toJson(): TxJson;
31
- static sortTx(a: Tx, b: Tx): 0 | 1 | -1;
32
- static sortTxJson(a: TxJson, b: TxJson): 0 | 1 | -1;
33
- static fn(): string;
37
+ export interface TxName extends TxBase {
38
+ type: "name";
39
+ name: string;
34
40
  }
41
+ export declare type Transactions = TxSend | TxPut | TxName;
42
+ /**
43
+ * Validate a new transaction against the latest state of the chain
44
+ */
45
+ export declare function validateNewTransaction(tx: Transactions, chain: ToolChain): -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | undefined;
46
+ /**
47
+ * Validate a transaction's data, regardless of the chain state
48
+ */
49
+ export declare function validateTransactionData(tx: Transactions): -4 | -5 | -6 | -7 | -8 | -9 | undefined;
50
+ export {};