godprotocol 1.0.81 → 1.0.82
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/.babelrc +3 -0
- package/Index.js +8 -19
- package/Loader_sequence/main.js +368 -234
- package/Objects/Account.js +187 -178
- package/Objects/Block.js +60 -61
- package/Objects/Blockweb.js +27 -34
- package/Objects/Chain.js +115 -118
- package/Objects/Explorer.js +30 -37
- package/Objects/Filesystem.js +95 -80
- package/Objects/Frame.js +43 -48
- package/Objects/Manager.js +60 -69
- package/Objects/Opcodes.js +39 -101
- package/Objects/Oracle.js +50 -66
- package/Objects/Virtual_machine.js +132 -132
- package/build/Account.js +187 -0
- package/build/Block.js +68 -0
- package/build/Blockweb.js +36 -0
- package/build/Chain.js +119 -0
- package/build/Explorer.js +47 -0
- package/build/Filesystem.js +127 -0
- package/build/Frame.js +52 -0
- package/build/Index.js +20 -0
- package/build/Manager.js +86 -0
- package/build/Opcodes.js +109 -0
- package/build/Oracle.js +81 -0
- package/build/Virtual_machine.js +136 -0
- package/build/add.js +26 -0
- package/build/create_server.js +132 -0
- package/build/framer.js +59 -0
- package/build/functions.js +82 -0
- package/build/hash.js +14 -0
- package/build/indices.js +31 -0
- package/build/jmp.js +19 -0
- package/build/main.js +327 -0
- package/build/opcodes.js +60 -0
- package/build/privacy.js +27 -0
- package/build/services.js +50 -0
- package/build/std.js +15 -0
- package/framer.js +36 -34
- package/opcodes/add.js +9 -25
- package/opcodes/indices.js +13 -16
- package/opcodes/jmp.js +7 -12
- package/opcodes/std.js +7 -13
- package/opcodes.js +32 -42
- package/package.json +1 -1
- package/readme.md +4 -4
- package/utils/create_server.js +72 -105
- package/utils/functions.js +31 -43
- package/utils/hash.js +10 -11
- package/utils/privacy.js +10 -15
- package/utils/services.js +32 -33
package/Objects/Account.js
CHANGED
|
@@ -1,187 +1,196 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!account.validate(payload, signature)) return _this.run_callback(callback, {
|
|
80
|
-
"private": account["private"],
|
|
1
|
+
import Loader_sequence from "../Loader_sequence/main";
|
|
2
|
+
import validate_signature from "../utils/privacy";
|
|
3
|
+
import Filesystem from "./Filesystem";
|
|
4
|
+
import Virtual_machine from "./Virtual_machine";
|
|
5
|
+
|
|
6
|
+
class Account extends Filesystem {
|
|
7
|
+
constructor(name, meta = {}) {
|
|
8
|
+
super();
|
|
9
|
+
|
|
10
|
+
meta = meta || {};
|
|
11
|
+
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.private = meta.private;
|
|
14
|
+
this.manager = meta.manager;
|
|
15
|
+
this.account = this;
|
|
16
|
+
this.stdin = new Array();
|
|
17
|
+
this.stdout = new Array();
|
|
18
|
+
|
|
19
|
+
if (!this.manager) throw new Error("Manager instance missing.");
|
|
20
|
+
|
|
21
|
+
this.name_hash();
|
|
22
|
+
this.physical_address = `${this.base_address}/${this.name}`;
|
|
23
|
+
this.set_paths(this);
|
|
24
|
+
|
|
25
|
+
this.assembler = new Loader_sequence(this);
|
|
26
|
+
|
|
27
|
+
this.chain = this.account_chain(this);
|
|
28
|
+
this.vm = new Virtual_machine(this.chain);
|
|
29
|
+
|
|
30
|
+
this.mine_buffer = {};
|
|
31
|
+
|
|
32
|
+
console.log(`Account Instance: ${this.name}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get_account = (name) => {
|
|
36
|
+
return this.manager.get_account(name) || this;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
manage_buffer = (callback) => {
|
|
40
|
+
let call_session = `${Date.now()}-${Math.random()}`;
|
|
41
|
+
this.mine_buffer[call_session] = { blocks: [], callback };
|
|
42
|
+
|
|
43
|
+
return call_session;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
buff = (block, pid) => {
|
|
47
|
+
let buffer = this.mine_buffer[pid];
|
|
48
|
+
if (!buffer) return;
|
|
49
|
+
|
|
50
|
+
buffer.blocks.push(block.stringify());
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
flush_buffer = (pid) => {
|
|
54
|
+
let buff = this.mine_buffer[pid];
|
|
55
|
+
if (!buff) return;
|
|
56
|
+
|
|
57
|
+
buff.callback && this.run_callback(buff.callback, buff.blocks);
|
|
58
|
+
delete this.mine_buffer[pid];
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
load = ({ program, signature, callback }) => {
|
|
62
|
+
let { instructions, account } = program;
|
|
63
|
+
account = this.get_account(account);
|
|
64
|
+
|
|
65
|
+
if (!account.validate(program, signature, callback)) return;
|
|
66
|
+
|
|
67
|
+
let pid = account.manage_buffer(callback);
|
|
68
|
+
|
|
69
|
+
this.manager.push({ sequence: instructions, account, pid });
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
parse = ({ payload, signature, callback }) => {
|
|
73
|
+
let { physical_address, account, query } = payload;
|
|
74
|
+
account = this.get_account(account);
|
|
75
|
+
|
|
76
|
+
if (!account.validate(payload, signature))
|
|
77
|
+
return this.run_callback(callback, {
|
|
78
|
+
private: account.private,
|
|
81
79
|
error: true,
|
|
82
|
-
error_message: "Invalid signature"
|
|
80
|
+
error_message: "Invalid signature",
|
|
83
81
|
});
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
|
|
83
|
+
let chain = account.manager.web.get(physical_address);
|
|
84
|
+
|
|
85
|
+
if (!chain)
|
|
86
|
+
return this.run_callback(callback, {
|
|
86
87
|
error: true,
|
|
87
|
-
error_message: "Address not found"
|
|
88
|
+
error_message: "Address not found",
|
|
88
89
|
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
90
|
+
|
|
91
|
+
let data = query ? chain.explore(query) : chain;
|
|
92
|
+
|
|
93
|
+
this.run_callback(callback, data && data.stringify());
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
run = (request) => {
|
|
97
|
+
let { payload, signature, callback } = request;
|
|
98
|
+
|
|
99
|
+
let { physical_address, account, query } = payload;
|
|
100
|
+
account = this.get_account(account);
|
|
101
|
+
|
|
102
|
+
if (!account.validate(payload, signature, callback)) return;
|
|
103
|
+
|
|
104
|
+
let pid = account.manage_buffer(callback);
|
|
105
|
+
|
|
106
|
+
let context = physical_address
|
|
107
|
+
? this.manager.web.get(physical_address)
|
|
108
|
+
: account.vm.get_context();
|
|
109
|
+
|
|
110
|
+
if (!context) return account.flush_buffer(pid);
|
|
111
|
+
|
|
112
|
+
let blk = query ? context.explore(query) : context.get_latest_block();
|
|
113
|
+
|
|
114
|
+
if (blk && blk.metadata && blk.metadata.program) {
|
|
115
|
+
let program = this.read(blk.metadata.program);
|
|
116
|
+
|
|
117
|
+
account.vm.contexts.push(context);
|
|
118
|
+
program.push("pop");
|
|
119
|
+
|
|
120
|
+
Array.isArray(program) &&
|
|
121
|
+
program.length &&
|
|
122
|
+
this.manager.push({
|
|
110
123
|
sequence: program,
|
|
111
|
-
account
|
|
112
|
-
pid
|
|
113
|
-
});
|
|
114
|
-
} else account.flush_buffer(pid);
|
|
115
|
-
});
|
|
116
|
-
_defineProperty(_assertThisInitialized(_this), "run_callback", function (callback, payload) {
|
|
117
|
-
setTimeout(function () {
|
|
118
|
-
if (!callback) return;
|
|
119
|
-
if (typeof callback === "function") return callback(payload);
|
|
120
|
-
callback.payload && callback.payload.physical_address && _this.vm.stdin(payload, function () {
|
|
121
|
-
return _this.run(callback);
|
|
124
|
+
account,
|
|
125
|
+
pid,
|
|
122
126
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
127
|
+
} else account.flush_buffer(pid);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
run_callback = (callback, payload) => {
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
if (!callback) return;
|
|
133
|
+
|
|
134
|
+
if (typeof callback === "function") return callback(payload);
|
|
135
|
+
|
|
136
|
+
callback.payload &&
|
|
137
|
+
callback.payload.physical_address &&
|
|
138
|
+
this.vm.stdin(payload, () => this.run(callback));
|
|
139
|
+
}, 0);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
flush_stdout = (block) => {
|
|
143
|
+
for (let s = 0; s < this.stdout.length; s++) {
|
|
144
|
+
let out = this.stdout[s];
|
|
145
|
+
if (out.pid === this.vm.track.pid) {
|
|
146
|
+
block.metadata.stdout.push(out.data);
|
|
147
|
+
this.stdout[s] = null;
|
|
132
148
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
}
|
|
150
|
+
this.stdout = this.stdout.filter((out) => !!out);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
validate = (payload, signature, callback) => {
|
|
154
|
+
if (!this.private) return true;
|
|
155
|
+
|
|
156
|
+
let valid = validate_signature(
|
|
157
|
+
this.name,
|
|
158
|
+
JSON.stringify(payload),
|
|
159
|
+
signature
|
|
160
|
+
);
|
|
161
|
+
if (!valid && callback)
|
|
162
|
+
this.run_callback(callback, {
|
|
163
|
+
private: this.private,
|
|
142
164
|
error: true,
|
|
143
|
-
error_message: "Invalid signature"
|
|
165
|
+
error_message: "Invalid signature",
|
|
144
166
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
_this.physical_address = "".concat(_this.base_address, "/").concat(_this.name);
|
|
176
|
-
_this.set_paths(_assertThisInitialized(_this));
|
|
177
|
-
_this.assembler = new _main["default"](_assertThisInitialized(_this));
|
|
178
|
-
_this.chain = _this.account_chain(_assertThisInitialized(_this));
|
|
179
|
-
_this.vm = new _Virtual_machine["default"](_this.chain);
|
|
180
|
-
_this.mine_buffer = {};
|
|
181
|
-
console.log("Account Instance: ".concat(_this.name));
|
|
182
|
-
return _this;
|
|
183
|
-
}
|
|
184
|
-
return _createClass(Account);
|
|
185
|
-
}(_Filesystem2["default"]);
|
|
186
|
-
var _default = Account;
|
|
187
|
-
exports["default"] = _default;
|
|
167
|
+
|
|
168
|
+
return valid;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
stringify = (str) => {
|
|
172
|
+
let obj = {};
|
|
173
|
+
|
|
174
|
+
obj.name = this.name;
|
|
175
|
+
obj.hash = this.hash;
|
|
176
|
+
obj.path = this.path;
|
|
177
|
+
obj.private = this.private;
|
|
178
|
+
obj.chain = this.chain.stringify();
|
|
179
|
+
obj.physical_address = this.physical_address;
|
|
180
|
+
|
|
181
|
+
return str ? JSON.stringify(obj) : obj;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
create_account = (payload) => {
|
|
185
|
+
let { name, meta } = payload;
|
|
186
|
+
|
|
187
|
+
return this.manager.add_account(name, meta);
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
endpoint = (endpoint, payload) => {
|
|
191
|
+
let method = this[endpoint];
|
|
192
|
+
typeof method === "function" && method(payload);
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export default Account;
|
package/Objects/Block.js
CHANGED
|
@@ -1,68 +1,67 @@
|
|
|
1
|
-
|
|
1
|
+
import { hash } from "../utils/hash";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
});
|
|
23
|
-
_defineProperty(this, "store", function (no_curs) {
|
|
24
|
-
var content = _this.chain.buffs.splice(-1)[0];
|
|
25
|
-
if (!no_curs) _this.cursor = _this.chain.cursors.splice(-1)[0];
|
|
3
|
+
class Block {
|
|
4
|
+
constructor(chain) {
|
|
5
|
+
this.chain = chain;
|
|
6
|
+
this.data = this.chain.txs;
|
|
7
|
+
this.metadata = {};
|
|
8
|
+
this.children = new Array();
|
|
9
|
+
this.index = this.chain.blocks.length;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
generate_hash = () => {
|
|
13
|
+
this.previous_hash = this.chain.get_latest_block();
|
|
14
|
+
if (this.previous_hash) this.previous_hash = this.previous_hash.hash;
|
|
15
|
+
|
|
16
|
+
this.hash = hash(JSON.stringify(this.data));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
store = (no_curs) => {
|
|
20
|
+
let content = this.chain.buffs.splice(-1)[0];
|
|
21
|
+
if (!no_curs) this.cursor = this.chain.cursors.splice(-1)[0];
|
|
26
22
|
if (!content) return;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
|
|
24
|
+
let cursors = Object.keys(content).filter(
|
|
25
|
+
(c) => c.startsWith("{") && c.endsWith("}")
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
for (let c = 0; c < cursors.length; c++) {
|
|
29
|
+
let curs = cursors[c];
|
|
30
|
+
|
|
31
|
+
this.metadata[curs.slice(1, -1)] = content[curs];
|
|
33
32
|
delete content[curs];
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
obj
|
|
44
|
-
|
|
45
|
-
obj.
|
|
46
|
-
obj.
|
|
47
|
-
obj.
|
|
48
|
-
obj.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
34
|
+
this.metadata.stdout = new Array();
|
|
35
|
+
this.chain.account.flush_stdout(this);
|
|
36
|
+
|
|
37
|
+
let datapath = this.chain.account.save(content, this.chain);
|
|
38
|
+
this.datapath = datapath;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
stringify = (str) => {
|
|
42
|
+
let obj = {};
|
|
43
|
+
|
|
44
|
+
obj.metadata = this.metadata;
|
|
45
|
+
obj.datapath = this.datapath;
|
|
46
|
+
obj.timelapse = this.timelapse;
|
|
47
|
+
obj.index = this.index;
|
|
48
|
+
obj.hash = this.hash;
|
|
49
|
+
obj.data = this.data;
|
|
50
|
+
obj.children = this.children.map(
|
|
51
|
+
(ch) =>
|
|
52
|
+
new Object({
|
|
53
|
+
hash: ch.hash,
|
|
54
|
+
chain: ch.chain.hash,
|
|
55
|
+
physical_address: ch.chain.physical_address,
|
|
56
|
+
})
|
|
57
|
+
);
|
|
55
58
|
obj.chain = {
|
|
56
|
-
hash:
|
|
57
|
-
physical_address:
|
|
59
|
+
hash: this.chain.hash,
|
|
60
|
+
physical_address: this.chain.physical_address,
|
|
58
61
|
};
|
|
62
|
+
|
|
59
63
|
return str ? JSON.stringify(obj) : obj;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.children = new Array();
|
|
65
|
-
this.index = this.chain.blocks.length;
|
|
66
|
-
});
|
|
67
|
-
var _default = Block;
|
|
68
|
-
exports["default"] = _default;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default Block;
|
package/Objects/Blockweb.js
CHANGED
|
@@ -1,36 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
16
|
-
var Blockweb = /*#__PURE__*/_createClass(function Blockweb(mgr) {
|
|
17
|
-
var _this = this;
|
|
18
|
-
_classCallCheck(this, Blockweb);
|
|
19
|
-
_defineProperty(this, "get", function (addr) {
|
|
20
|
-
var hash = _this.physical_addresses[addr];
|
|
21
|
-
var chain = _this.chains[hash];
|
|
1
|
+
import Chain from "./Chain";
|
|
2
|
+
|
|
3
|
+
class Blockweb {
|
|
4
|
+
constructor(mgr) {
|
|
5
|
+
this.mgr = mgr;
|
|
6
|
+
this.physical_addresses = new Object();
|
|
7
|
+
this.chains = new Object();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
get = (addr) => {
|
|
11
|
+
let hash = this.physical_addresses[addr];
|
|
12
|
+
|
|
13
|
+
let chain = this.chains[hash];
|
|
14
|
+
|
|
22
15
|
return chain;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
set = (parent, name) => {
|
|
19
|
+
let chain = new Chain(parent, name);
|
|
20
|
+
this.chains[chain.hash] = chain;
|
|
21
|
+
|
|
22
|
+
this.physical_addresses[chain.physical_address] = chain.hash;
|
|
23
|
+
this.chains[chain.hash] = chain;
|
|
24
|
+
|
|
29
25
|
return chain;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
});
|
|
35
|
-
var _default = Blockweb;
|
|
36
|
-
exports["default"] = _default;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default Blockweb;
|