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.
- package/bundle.js +1 -109743
- package/dist/chain/Block.d.ts +16 -8
- package/dist/chain/Block.js +81 -20
- package/dist/chain/Block.js.map +1 -1
- package/dist/chain/ToolChain.d.ts +18 -3
- package/dist/chain/ToolChain.js +191 -24
- package/dist/chain/ToolChain.js.map +1 -1
- package/dist/chain/Tx.d.ts +46 -30
- package/dist/chain/Tx.js +47 -104
- package/dist/chain/Tx.js.map +1 -1
- package/dist/chain/isValidChain.d.ts +1 -2
- package/dist/chain/isValidChain.js +24 -7
- package/dist/chain/isValidChain.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/{test-verify-a/000182.log → dist/infuraFilecoin.d.ts} +0 -0
- package/dist/infuraFilecoin.js +2 -0
- package/dist/infuraFilecoin.js.map +1 -0
- package/dist/makeTx.d.ts +1 -0
- package/dist/makeTx.js +27 -0
- package/dist/makeTx.js.map +1 -0
- package/dist/messageHandlers/handleCrdtGet.js +7 -12
- package/dist/messageHandlers/handleCrdtGet.js.map +1 -1
- package/dist/messageHandlers/handleCrdtPut.js +32 -16
- package/dist/messageHandlers/handleCrdtPut.js.map +1 -1
- package/dist/messageHandlers/handleGet.js +6 -12
- package/dist/messageHandlers/handleGet.js.map +1 -1
- package/dist/messageHandlers/handleJoin.js +1 -1
- package/dist/messageHandlers/handleJoin.js.map +1 -1
- package/dist/messageHandlers/handlePut.js +13 -22
- package/dist/messageHandlers/handlePut.js.map +1 -1
- package/dist/messageHandlers/handleServers.js +1 -1
- package/dist/messageHandlers/handleServers.js.map +1 -1
- package/dist/messageHandlers/handleSubscribe.js +14 -14
- package/dist/messageHandlers/handleSubscribe.js.map +1 -1
- package/dist/test.d.ts +1 -0
- package/dist/test.js +17 -0
- package/dist/test.js.map +1 -0
- package/dist/toolChainServer.d.ts +8 -0
- package/dist/toolChainServer.js +60 -0
- package/dist/toolChainServer.js.map +1 -0
- package/dist/toolDbAnonSignIn.js +1 -1
- package/dist/toolDbAnonSignIn.js.map +1 -1
- package/dist/toolDbClientOnMessage.js +3 -1
- package/dist/toolDbClientOnMessage.js.map +1 -1
- package/dist/toolDbCrdtGet.js +3 -1
- package/dist/toolDbCrdtGet.js.map +1 -1
- package/dist/toolDbCrdtPut.js +7 -12
- package/dist/toolDbCrdtPut.js.map +1 -1
- package/dist/toolDbGet.js +5 -2
- package/dist/toolDbGet.js.map +1 -1
- package/dist/toolDbKeysSignIn.js +1 -1
- package/dist/toolDbKeysSignIn.js.map +1 -1
- package/dist/toolDbNetwork.js +4 -4
- package/dist/toolDbNetwork.js.map +1 -1
- package/dist/toolDbPut.js +7 -12
- package/dist/toolDbPut.js.map +1 -1
- package/dist/toolDbSignIn.js +10 -16
- package/dist/toolDbSignIn.js.map +1 -1
- package/dist/toolDbSignUp.js +33 -52
- package/dist/toolDbSignUp.js.map +1 -1
- package/dist/toolDbVerificationWrapper.d.ts +2 -2
- package/dist/toolDbVerificationWrapper.js.map +1 -1
- package/dist/toolchain.d.ts +1 -0
- package/dist/toolchain.js +8 -0
- package/dist/toolchain.js.map +1 -0
- package/dist/tooldb.d.ts +14 -10
- package/dist/tooldb.js +24 -5
- package/dist/tooldb.js.map +1 -1
- package/dist/types/message.d.ts +8 -6
- package/dist/types/message.js.map +1 -1
- package/dist/types/tooldb.d.ts +0 -19
- package/dist/utils/verifyMessage.js +3 -2
- package/dist/utils/verifyMessage.js.map +1 -1
- package/dist/utils/verifyPeer.d.ts +2 -2
- package/dist/utils/verifyPeer.js +2 -2
- package/dist/utils/verifyPeer.js.map +1 -1
- package/package.json +5 -5
- package/test-alice/000425.ldb +0 -0
- package/test-alice/000427.ldb +0 -0
- package/test-alice/000430.ldb +0 -0
- package/test-alice/000431.log +0 -0
- package/test-alice/CURRENT +1 -1
- package/test-alice/LOG +5 -5
- package/test-alice/LOG.old +5 -5
- package/test-alice/MANIFEST-000429 +0 -0
- package/test-alice-speed/000236.log +0 -0
- package/test-alice-speed/000237.ldb +0 -0
- package/test-alice-speed/CURRENT +1 -1
- package/test-alice-speed/LOG +14 -5
- package/test-alice-speed/LOG.old +5 -14
- package/test-alice-speed/MANIFEST-000234 +0 -0
- package/test-bob/000425.ldb +0 -0
- package/test-bob/000427.ldb +0 -0
- package/test-bob/000430.ldb +0 -0
- package/test-bob/000431.log +0 -0
- package/test-bob/CURRENT +1 -1
- package/test-bob/LOG +5 -5
- package/test-bob/LOG.old +5 -5
- package/test-bob/MANIFEST-000429 +0 -0
- package/test-node-a/000425.ldb +0 -0
- package/test-node-a/000427.ldb +0 -0
- package/test-node-a/000430.ldb +0 -0
- package/test-node-a/000431.log +0 -0
- package/test-node-a/CURRENT +1 -1
- package/test-node-a/LOG +5 -5
- package/test-node-a/LOG.old +5 -5
- package/test-node-a/MANIFEST-000429 +0 -0
- package/test-node-b/000425.ldb +0 -0
- package/test-node-b/000427.ldb +0 -0
- package/test-node-b/000430.ldb +0 -0
- package/test-node-b/000431.log +0 -0
- package/test-node-b/CURRENT +1 -1
- package/test-node-b/LOG +5 -5
- package/test-node-b/LOG.old +5 -5
- package/test-node-b/MANIFEST-000429 +0 -0
- package/test-verify-a/000212.log +0 -0
- package/test-verify-a/CURRENT +1 -1
- package/test-verify-a/LOG +3 -3
- package/test-verify-a/LOG.old +3 -3
- package/test-verify-a/{MANIFEST-000181 → MANIFEST-000211} +0 -0
- package/pvutils-tests-replacement.js +0 -777
- package/test-alice/000269.ldb +0 -0
- package/test-alice/000271.ldb +0 -0
- package/test-alice/000274.ldb +0 -0
- package/test-alice/000277.ldb +0 -0
- package/test-alice/000278.log +0 -0
- package/test-alice/MANIFEST-000276 +0 -0
- package/test-alice-speed/000185.ldb +0 -0
- package/test-alice-speed/000187.ldb +0 -0
- package/test-alice-speed/000188.log +0 -0
- package/test-alice-speed/MANIFEST-000186 +0 -0
- package/test-bob/000269.ldb +0 -0
- package/test-bob/000271.ldb +0 -0
- package/test-bob/000274.ldb +0 -0
- package/test-bob/000277.ldb +0 -0
- package/test-bob/000278.log +0 -0
- package/test-bob/MANIFEST-000276 +0 -0
- package/test-node-a/000269.ldb +0 -0
- package/test-node-a/000271.ldb +0 -0
- package/test-node-a/000274.ldb +0 -0
- package/test-node-a/000277.ldb +0 -0
- package/test-node-a/000278.log +0 -0
- package/test-node-a/MANIFEST-000276 +0 -0
- package/test-node-b/000269.ldb +0 -0
- package/test-node-b/000271.ldb +0 -0
- package/test-node-b/000274.ldb +0 -0
- package/test-node-b/000277.ldb +0 -0
- package/test-node-b/000278.log +0 -0
- package/test-node-b/MANIFEST-000276 +0 -0
package/dist/chain/Block.d.ts
CHANGED
|
@@ -1,21 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare type BlockData =
|
|
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
|
|
9
|
-
private
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
25
|
+
static merkleRoot(block: Block): any;
|
|
18
26
|
static blockHash(block: Block): string;
|
|
19
|
-
static
|
|
27
|
+
static verifyBlockNonce(block: Block): boolean;
|
|
20
28
|
static verifyBlockData(block: Block): boolean;
|
|
21
29
|
}
|
package/dist/chain/Block.js
CHANGED
|
@@ -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,
|
|
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.
|
|
19
|
-
this.
|
|
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.
|
|
22
|
-
return
|
|
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
|
-
|
|
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.
|
|
56
|
-
|
|
57
|
-
|
|
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
|
|
61
|
-
return
|
|
116
|
+
var height = block.height, nonce = block.nonce, merkleRoot = block.merkleRoot;
|
|
117
|
+
return (0, __1.sha256)("" + nonce + height + merkleRoot).toString();
|
|
62
118
|
};
|
|
63
|
-
Block.
|
|
64
|
-
var
|
|
65
|
-
var
|
|
66
|
-
var
|
|
67
|
-
|
|
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.
|
|
73
|
-
if (verify !== tx.
|
|
130
|
+
var verify = web3.eth.accounts.recover(tx.adress, tx.sig);
|
|
131
|
+
if (verify !== tx.adress)
|
|
74
132
|
isValid = false;
|
|
75
133
|
});
|
|
76
|
-
|
|
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
|
}());
|
package/dist/chain/Block.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Block.js","sourceRoot":"","sources":["../../src/chain/Block.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
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
|
}
|
package/dist/chain/ToolChain.js
CHANGED
|
@@ -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 =
|
|
25
|
+
var Block_1 = __importStar(require("./Block"));
|
|
7
26
|
var isValidChain_1 = __importDefault(require("./isValidChain"));
|
|
8
|
-
var
|
|
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.
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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 (
|
|
24
|
-
_this._balancesState[tx.
|
|
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
|
-
|
|
27
|
-
_this.
|
|
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
|
|
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
|
|
70
|
-
* check leader
|
|
239
|
+
* check signatures
|
|
71
240
|
*/
|
|
72
|
-
if (block.
|
|
73
|
-
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":"
|
|
1
|
+
{"version":3,"file":"ToolChain.js","sourceRoot":"","sources":["../../src/chain/ToolChain.ts"],"names":[],"mappings":"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"}
|
package/dist/chain/Tx.d.ts
CHANGED
|
@@ -1,34 +1,50 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
to: string;
|
|
1
|
+
import ToolChain from "./ToolChain";
|
|
2
|
+
declare type TxType = "tx" | "put" | "name";
|
|
3
|
+
export interface TxBase {
|
|
5
4
|
timestamp: number;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
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 {};
|