godprotocol 1.1.2 → 1.1.3
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/Datatypes/arr.js +276 -3
- package/Datatypes/bool.js +5 -3
- package/Datatypes/callable.js +4 -3
- package/Datatypes/cls.js +41 -0
- package/Datatypes/conf.js +117 -0
- package/Datatypes/func.js +22 -0
- package/Datatypes/functions/storage.js +20 -1
- package/Datatypes/instance.js +155 -0
- package/Datatypes/num.js +173 -3
- package/Datatypes/str.js +130 -3
- package/Datatypes/twa.js +81 -3
- package/Datatypes/voi.js +3 -3
- package/Index.js +1 -34
- package/Objects/Account.js +45 -29
- package/Objects/Blockweb.js +15 -28
- package/Objects/Callable.js +176 -16
- package/Objects/Chain.js +189 -28
- package/Objects/Datatypes.js +620 -0
- package/Objects/Manager.js +10 -2
- package/Objects/Oracle.js +229 -55
- package/Objects/Repository.js +6 -35
- package/Objects/Trinity.js +3 -3
- package/Objects/Utils.js +16 -0
- package/Objects/Virtual_machine.js +341 -11
- package/callables/functions/display.js +15 -1
- package/callables/functions/exit.js +10 -0
- package/callables/functions/net.js +27 -0
- package/callables/functions/twain.js +11 -0
- package/callables/register.js +23 -7
- package/package.json +1 -1
- package/utils/create_server.js +22 -8
- package/utils/hash.js +18 -0
- package/utils/ops.js +17 -0
- package/utils/services.js +2 -0
- package/utils/vm_utils.js +76 -43
- package/Objects/GDS/Arena_classic/.config +0 -1
- package/Objects/GDS/Arena_classic/Accounts/lola/.config +0 -1
package/Datatypes/num.js
CHANGED
|
@@ -1,10 +1,180 @@
|
|
|
1
1
|
import Storage from "./functions/storage";
|
|
2
2
|
|
|
3
3
|
class Num extends Storage {
|
|
4
|
-
constructor(
|
|
5
|
-
super()
|
|
4
|
+
constructor(config, manager) {
|
|
5
|
+
super(manager)
|
|
6
6
|
|
|
7
|
-
this.
|
|
7
|
+
this.config = config
|
|
8
|
+
this.type = 'number'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
call = async (name, args)=>{
|
|
12
|
+
let result, other, me = await this.literal();
|
|
13
|
+
|
|
14
|
+
other = args[0] && await args[0].literal()
|
|
15
|
+
switch(name){
|
|
16
|
+
case '__add__':
|
|
17
|
+
result = me + other;
|
|
18
|
+
break;
|
|
19
|
+
case '__sub__':
|
|
20
|
+
result = me - other;
|
|
21
|
+
break;
|
|
22
|
+
case '__mul__':
|
|
23
|
+
result = me * other;
|
|
24
|
+
break;
|
|
25
|
+
case '__div__':
|
|
26
|
+
result = me / other;
|
|
27
|
+
break;
|
|
28
|
+
case '__exp__':
|
|
29
|
+
result = me ** other;
|
|
30
|
+
break;
|
|
31
|
+
case '__floordiv__':
|
|
32
|
+
result = Math.floor(me / other);
|
|
33
|
+
break;
|
|
34
|
+
case '__mod__':
|
|
35
|
+
result = me % other;
|
|
36
|
+
break;
|
|
37
|
+
case '__eq__':
|
|
38
|
+
result = me === other
|
|
39
|
+
break;
|
|
40
|
+
case '__ne__':
|
|
41
|
+
result = me !== other
|
|
42
|
+
break;
|
|
43
|
+
case '__lt__':
|
|
44
|
+
result = me < other
|
|
45
|
+
break;
|
|
46
|
+
case '__lte__':
|
|
47
|
+
result = me <= other
|
|
48
|
+
break;
|
|
49
|
+
case '__gt__':
|
|
50
|
+
result = me > other
|
|
51
|
+
break;
|
|
52
|
+
case '__gte__':
|
|
53
|
+
result = me >= other
|
|
54
|
+
break;
|
|
55
|
+
case 'abs':
|
|
56
|
+
result = Math.abs(me)
|
|
57
|
+
break;
|
|
58
|
+
case 'sqrt':
|
|
59
|
+
result = Math.sqrt(me)
|
|
60
|
+
break;
|
|
61
|
+
case 'to_int':
|
|
62
|
+
result = parseInt(me)
|
|
63
|
+
break;
|
|
64
|
+
case 'to_float':
|
|
65
|
+
result = Number(me).toFixed(other)
|
|
66
|
+
break;
|
|
67
|
+
case 'to_string':
|
|
68
|
+
result = me.toString()
|
|
69
|
+
break;
|
|
70
|
+
case 'tan':
|
|
71
|
+
result = Math.tan(me)
|
|
72
|
+
break;
|
|
73
|
+
case 'sin':
|
|
74
|
+
result = Math.sin(me)
|
|
75
|
+
break;
|
|
76
|
+
case 'cos':
|
|
77
|
+
result = Math.cos(me)
|
|
78
|
+
break;
|
|
79
|
+
case 'atan':
|
|
80
|
+
result = Math.atan(me)
|
|
81
|
+
break;
|
|
82
|
+
case 'atan2':
|
|
83
|
+
result = Math.atan2(me)
|
|
84
|
+
break;
|
|
85
|
+
case 'asin':
|
|
86
|
+
result = Math.asin(me)
|
|
87
|
+
break;
|
|
88
|
+
case 'acos':
|
|
89
|
+
result = Math.acos(me)
|
|
90
|
+
break;
|
|
91
|
+
case 'tanh':
|
|
92
|
+
result = Math.tanh(me)
|
|
93
|
+
break;
|
|
94
|
+
case 'sinh':
|
|
95
|
+
result = Math.sinh(me)
|
|
96
|
+
break;
|
|
97
|
+
case 'cosh':
|
|
98
|
+
result = Math.cosh(me)
|
|
99
|
+
break;
|
|
100
|
+
case 'asinh':
|
|
101
|
+
result = Math.asinh(me)
|
|
102
|
+
break;
|
|
103
|
+
case 'acosh':
|
|
104
|
+
result = Math.acosh(me)
|
|
105
|
+
break;
|
|
106
|
+
case 'atanh':
|
|
107
|
+
result = Math.atanh(me)
|
|
108
|
+
break;
|
|
109
|
+
case 'round':
|
|
110
|
+
if (other){
|
|
111
|
+
result = Number(Number(me).toFixed(other))
|
|
112
|
+
}else result = Math.round(me)
|
|
113
|
+
break;
|
|
114
|
+
case 'ceil':
|
|
115
|
+
result = Math.ceil(me)
|
|
116
|
+
break;
|
|
117
|
+
case 'floor':
|
|
118
|
+
result = Math.floor(me)
|
|
119
|
+
break;
|
|
120
|
+
case 'is_prime':
|
|
121
|
+
if (me <= 1) result = false;
|
|
122
|
+
if (me <= 3) result = true;
|
|
123
|
+
|
|
124
|
+
if (me % 2 === 0 || me % 3 === 0) result = false;
|
|
125
|
+
|
|
126
|
+
for (let i = 5; i * i <= me; i += 6) {
|
|
127
|
+
if (me % i === 0 || me % (i + 2) === 0) {
|
|
128
|
+
result = false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
result = true;
|
|
132
|
+
break;
|
|
133
|
+
case 'is_odd':
|
|
134
|
+
result = (me % 2) === 1
|
|
135
|
+
break
|
|
136
|
+
case 'is_even':
|
|
137
|
+
result = (me % 2) === 0
|
|
138
|
+
break
|
|
139
|
+
case 'log':
|
|
140
|
+
if (!other || (other === 10))
|
|
141
|
+
result = Math.log10(me)
|
|
142
|
+
else if (other === Math.E){
|
|
143
|
+
result = Math.log(me)
|
|
144
|
+
}else result = Math.log(me) / Math.log(other)
|
|
145
|
+
break;
|
|
146
|
+
case 'factorial':
|
|
147
|
+
result = this.factorial(me)
|
|
148
|
+
break;
|
|
149
|
+
case 'is_perfect_square':
|
|
150
|
+
if (me < 0) result = false;
|
|
151
|
+
|
|
152
|
+
let sqrt = Math.sqrt(me);
|
|
153
|
+
result = sqrt === Math.floor(sqrt);
|
|
154
|
+
break
|
|
155
|
+
case 'to_degrees':
|
|
156
|
+
result = me * (180 / Math.PI)
|
|
157
|
+
break;
|
|
158
|
+
case 'to_radians':
|
|
159
|
+
result = me * (Math.PI / 180)
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
factorial = (value)=>{
|
|
167
|
+
if (value === 0)
|
|
168
|
+
return 1
|
|
169
|
+
return value * this.factorial(value - 1)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
configs = (name)=>{
|
|
173
|
+
let conf = {__add__: {
|
|
174
|
+
parameters: [{name: 'other', position: 0}]
|
|
175
|
+
}}
|
|
176
|
+
|
|
177
|
+
return conf[name]
|
|
8
178
|
}
|
|
9
179
|
}
|
|
10
180
|
|
package/Datatypes/str.js
CHANGED
|
@@ -1,10 +1,137 @@
|
|
|
1
1
|
import Storage from "./functions/storage";
|
|
2
2
|
|
|
3
3
|
class Str extends Storage {
|
|
4
|
-
constructor(
|
|
5
|
-
super()
|
|
4
|
+
constructor(config, manager) {
|
|
5
|
+
super(manager)
|
|
6
6
|
|
|
7
|
-
this.
|
|
7
|
+
this.config = config
|
|
8
|
+
this.type = 'string'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
call = async (name, args)=>{
|
|
12
|
+
let result, other, me = await this.literal();
|
|
13
|
+
|
|
14
|
+
switch(name){
|
|
15
|
+
case 'upper':
|
|
16
|
+
result = me.toUpperCase();
|
|
17
|
+
break;
|
|
18
|
+
case 'lower':
|
|
19
|
+
result = me.toLowerCase();
|
|
20
|
+
break;
|
|
21
|
+
case 'title':
|
|
22
|
+
result = "";
|
|
23
|
+
me = me.split(' ').map(m=>{
|
|
24
|
+
result = `${result} ${m[0].toUpperCase()}${m.slice(1).toLowerCase()}`.trim()
|
|
25
|
+
})
|
|
26
|
+
break;
|
|
27
|
+
case 'slice':
|
|
28
|
+
let start = args[0], end = args[1];
|
|
29
|
+
start = start && await start.literal()
|
|
30
|
+
end = end && await end.literal()
|
|
31
|
+
|
|
32
|
+
result = me.slice(start, end)
|
|
33
|
+
break;
|
|
34
|
+
case 'concat':
|
|
35
|
+
other = await args[0].literal()
|
|
36
|
+
result = `${me}${other}`
|
|
37
|
+
break;
|
|
38
|
+
case 'find':
|
|
39
|
+
other = args[0]
|
|
40
|
+
let lst = args[1] && await args[1].literal()
|
|
41
|
+
result = me[lst?'lastIndexOf': 'indexOf'](await other.literal())
|
|
42
|
+
break;
|
|
43
|
+
case 'includes':
|
|
44
|
+
other = args[0]
|
|
45
|
+
result = me.includes(await other.literal())
|
|
46
|
+
break;
|
|
47
|
+
case 'index':
|
|
48
|
+
other = await args[0].literal()
|
|
49
|
+
if (other < 0){
|
|
50
|
+
result = me.slice(other)[0]
|
|
51
|
+
}else result = me[other]
|
|
52
|
+
break;
|
|
53
|
+
case 'trim':
|
|
54
|
+
other = args[0]
|
|
55
|
+
if (other) other = await other.literal()
|
|
56
|
+
else other = 0
|
|
57
|
+
let char = args[1]
|
|
58
|
+
if (char) char = await char.literal()
|
|
59
|
+
else char = ' '
|
|
60
|
+
|
|
61
|
+
let esc_regx_char = (char) => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
62
|
+
|
|
63
|
+
let char_regx = esc_regx_char(char);
|
|
64
|
+
|
|
65
|
+
switch (other) {
|
|
66
|
+
case 1:
|
|
67
|
+
result = me.replace(new RegExp(`^${char_regx}+`), '');
|
|
68
|
+
break
|
|
69
|
+
case 2:
|
|
70
|
+
result = me.replace(new RegExp(`${char_regx}+$`), '');
|
|
71
|
+
break
|
|
72
|
+
case 0:
|
|
73
|
+
default:
|
|
74
|
+
result = me.replace(new RegExp(`^${char_regx}+|${char_regx}+$`, 'g'), '');
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
case 'length':
|
|
78
|
+
result = me.length;
|
|
79
|
+
break;
|
|
80
|
+
case 'is_empty':
|
|
81
|
+
result = !!me;
|
|
82
|
+
breakl
|
|
83
|
+
case 'is_blank':
|
|
84
|
+
result = !!me.trim()
|
|
85
|
+
break;
|
|
86
|
+
case 'is_numeric':
|
|
87
|
+
result = !!me && !isNaN(Number(me))
|
|
88
|
+
break;
|
|
89
|
+
case "endswith":
|
|
90
|
+
result = me.endsWith(await args[0].literal())
|
|
91
|
+
break;
|
|
92
|
+
case "startswith":
|
|
93
|
+
result = me.startsWith(await args[0].literal())
|
|
94
|
+
break;
|
|
95
|
+
case 'padend':
|
|
96
|
+
result = me.padEnd(await args[0].literal(), await args[1].literal())
|
|
97
|
+
break;
|
|
98
|
+
case 'padstart':
|
|
99
|
+
result = me.padStart(await args[0].literal(), await args[1].literal())
|
|
100
|
+
break;
|
|
101
|
+
case 'count':
|
|
102
|
+
other = await args[0].literal()
|
|
103
|
+
|
|
104
|
+
let count = 0;
|
|
105
|
+
let position = 0;
|
|
106
|
+
|
|
107
|
+
while ((position = me.indexOf(other, position)) !== -1) {
|
|
108
|
+
count++;
|
|
109
|
+
position += other.length;
|
|
110
|
+
}
|
|
111
|
+
result = count;
|
|
112
|
+
break;
|
|
113
|
+
case 'reverse':
|
|
114
|
+
result = me.split('').reverse().join('');
|
|
115
|
+
break
|
|
116
|
+
case 'repeat':
|
|
117
|
+
result = me.repeat(await args[0].literal())
|
|
118
|
+
break
|
|
119
|
+
case 'replace':
|
|
120
|
+
let gl = args[2] && await args[2].literal(),
|
|
121
|
+
su = await args[0].literal(), rpl = await args[1].literal()
|
|
122
|
+
result = me.replace(su, rpl)
|
|
123
|
+
if (gl){
|
|
124
|
+
while(result.includes(su)) result = result.replace(su, rpl)
|
|
125
|
+
}
|
|
126
|
+
break
|
|
127
|
+
case "split":
|
|
128
|
+
break;
|
|
129
|
+
case 'charcode':
|
|
130
|
+
break;
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return result;
|
|
8
135
|
}
|
|
9
136
|
}
|
|
10
137
|
|
package/Datatypes/twa.js
CHANGED
|
@@ -1,10 +1,88 @@
|
|
|
1
1
|
import Storage from "./functions/storage";
|
|
2
2
|
|
|
3
3
|
class Twa extends Storage {
|
|
4
|
-
constructor(
|
|
5
|
-
super();
|
|
4
|
+
constructor(config, manager) {
|
|
5
|
+
super(manager);
|
|
6
6
|
|
|
7
|
-
this.
|
|
7
|
+
this.config = config
|
|
8
|
+
this.type = 'twain'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
call = async(name, args, options)=>{
|
|
12
|
+
let {config, chain} = options
|
|
13
|
+
let me = await this.statics_()
|
|
14
|
+
let oracle = this.account.manager.oracle;
|
|
15
|
+
|
|
16
|
+
let spli = this.value.value.split('/');
|
|
17
|
+
let config_hash = spli.slice(-1)[0], store;
|
|
18
|
+
|
|
19
|
+
let other = args[0], result;
|
|
20
|
+
|
|
21
|
+
switch(name){
|
|
22
|
+
case 'set':
|
|
23
|
+
|
|
24
|
+
me[await oracle.hash(await other.literal(), 'sha1')] = [await this.account.vm.instance_address((await other.statics_())), await this.account.vm.instance_address((await args[1].statics_()))]
|
|
25
|
+
|
|
26
|
+
store = true;
|
|
27
|
+
break;
|
|
28
|
+
case 'get':
|
|
29
|
+
other = other && await other.literal();
|
|
30
|
+
result = me[await oracle.hash(other, 'sha1')]
|
|
31
|
+
result = result? {type:'address', value: result[1]}:null
|
|
32
|
+
break;
|
|
33
|
+
case 'entries':
|
|
34
|
+
result = new Array()
|
|
35
|
+
for (let prop in me){
|
|
36
|
+
let pair = me[prop]
|
|
37
|
+
|
|
38
|
+
let res = await this.account.vm.execute({
|
|
39
|
+
type:'call',
|
|
40
|
+
identifier: 'array',
|
|
41
|
+
arguments: [pair],
|
|
42
|
+
location: `${config.location}/${prop}`
|
|
43
|
+
}, {chain})
|
|
44
|
+
result.push(res.value);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
break;
|
|
48
|
+
case "keys":
|
|
49
|
+
result = new Array()
|
|
50
|
+
for (let prop in me){
|
|
51
|
+
let pair = me[prop]
|
|
52
|
+
result.push(pair[0])
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case "values":
|
|
56
|
+
result = new Array()
|
|
57
|
+
for (let prop in me){
|
|
58
|
+
let pair = me[prop]
|
|
59
|
+
result.push(pair[1])
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
case 'clear':
|
|
63
|
+
me = {}
|
|
64
|
+
store = true
|
|
65
|
+
break;
|
|
66
|
+
case 'remove':
|
|
67
|
+
other = other && await other.literal()
|
|
68
|
+
other = other && await oracle.hash(other, 'sha1')
|
|
69
|
+
result = Object(me).hasOwnProperty(other)
|
|
70
|
+
delete me[other]
|
|
71
|
+
store = true
|
|
72
|
+
break;
|
|
73
|
+
case 'copy':
|
|
74
|
+
result = me;
|
|
75
|
+
break;
|
|
76
|
+
case 'is_empty':
|
|
77
|
+
result = Array.from(Object.keys(me)).length === 0
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (store){
|
|
82
|
+
await oracle.write(spli.slice(0,-1).join('/'), {type: this.type, values: me}, {config_hash, config: true})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return result;
|
|
8
86
|
}
|
|
9
87
|
}
|
|
10
88
|
|
package/Datatypes/voi.js
CHANGED
package/Index.js
CHANGED
|
@@ -1,38 +1,5 @@
|
|
|
1
1
|
import Trinity from "./Objects/Trinity";
|
|
2
2
|
|
|
3
|
-
let trinity = new Trinity();
|
|
4
|
-
|
|
5
|
-
const starter = async () => {
|
|
6
|
-
let manager = await trinity.add_manager("Arena_classic", {
|
|
7
|
-
server: {
|
|
8
|
-
port: 1408,
|
|
9
|
-
hostname: "127.0.0.1",
|
|
10
|
-
repo: true,
|
|
11
|
-
},
|
|
12
|
-
repositories: [
|
|
13
|
-
// {server}
|
|
14
|
-
],
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
// let manager2 = await trinity.add_manager("Arena_classic", {
|
|
18
|
-
// server: {
|
|
19
|
-
// port: 1409,
|
|
20
|
-
// hostname: "127.0.0.1",
|
|
21
|
-
// repo: true,
|
|
22
|
-
// },
|
|
23
|
-
// sync_server: {
|
|
24
|
-
// port: 1408,
|
|
25
|
-
// hostname: "127.0.0.1",
|
|
26
|
-
// },
|
|
27
|
-
// repositories: [
|
|
28
|
-
// // {server}
|
|
29
|
-
// ],
|
|
30
|
-
// });
|
|
31
|
-
|
|
32
|
-
let account = await manager.add_account("lola");
|
|
33
|
-
// let account2 = await manager2.add_account("lola");
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
starter();
|
|
3
|
+
let trinity = new Trinity(process.env.Trinity || "GodProtocol");
|
|
37
4
|
|
|
38
5
|
export default trinity;
|
package/Objects/Account.js
CHANGED
|
@@ -1,62 +1,78 @@
|
|
|
1
|
+
import Utils from "./Utils";
|
|
1
2
|
import register from "../callables/register";
|
|
2
3
|
import Chain from "./Chain";
|
|
3
4
|
import Virtual_machine from "./Virtual_machine";
|
|
5
|
+
import Compiler from "../../../compiler/compiler";
|
|
4
6
|
|
|
5
|
-
class Account {
|
|
7
|
+
class Account extends Utils {
|
|
6
8
|
constructor(name, options) {
|
|
9
|
+
super()
|
|
10
|
+
|
|
7
11
|
this.name = name;
|
|
8
12
|
|
|
9
13
|
this.manager = options.manager;
|
|
14
|
+
this.parent = options.parent || this
|
|
10
15
|
this.repository = this.manager.repository;
|
|
16
|
+
this.account = this
|
|
11
17
|
|
|
12
18
|
this.physical_address = `Accounts/${name}`;
|
|
19
|
+
this.buffs = new Array()
|
|
13
20
|
|
|
14
|
-
this.chain = new Chain(this.physical_address, this);
|
|
21
|
+
this.chain = new Chain(this.physical_address, this.parent);
|
|
22
|
+
this.path = this.chain.path
|
|
15
23
|
}
|
|
16
24
|
|
|
17
|
-
|
|
18
|
-
let {
|
|
25
|
+
load = async (payload) => {
|
|
26
|
+
let { sequence: codes, physical_address } = payload;
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
physical_address = `${this.physical_address}/${physical_address}`
|
|
29
|
+
|
|
30
|
+
let chain = await this.chain.chain(physical_address, {root:true})
|
|
22
31
|
|
|
23
|
-
await
|
|
32
|
+
return {value: await chain.add_config(codes), type:'address'}
|
|
24
33
|
};
|
|
25
34
|
|
|
26
|
-
|
|
27
|
-
let {
|
|
35
|
+
run = async (payload) => {
|
|
36
|
+
let { physical_address, account } = payload;
|
|
28
37
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
...instruction,
|
|
35
|
-
sequence: instruction.sequence,
|
|
36
|
-
physical_address: instruction.physical_address,
|
|
37
|
-
});
|
|
38
|
-
instruction.sequence = addresses;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
let chain = await this.vm.handle_chain(instruction.physical_address);
|
|
42
|
-
let block = await chain.write(instruction);
|
|
43
|
-
codes[c] = block.address;
|
|
44
|
-
}
|
|
45
|
-
let chain = await this.vm.handle_chain(physical_address);
|
|
46
|
-
await chain.write({ ...payload, sequence: codes });
|
|
47
|
-
|
|
48
|
-
return codes;
|
|
38
|
+
let acc = await this.manager.get_account(account) || this;
|
|
39
|
+
let chain = await acc.chain.chain(`${acc.physical_address}/${physical_address}`)
|
|
40
|
+
|
|
41
|
+
let config = await chain.read({config: true})
|
|
42
|
+
return await this.vm.execute(config, {chain, main:true})
|
|
49
43
|
};
|
|
50
44
|
|
|
45
|
+
parse = async(payload)=>{
|
|
46
|
+
let {account, physical_address, depth, history, query} = payload;
|
|
47
|
+
|
|
48
|
+
let acc = await this.manager.get_account(account) || this;
|
|
49
|
+
let chain = await acc.chain.chain(`${acc.physical_address}/${physical_address}`)
|
|
50
|
+
|
|
51
|
+
let config = await chain.read({query, depth, history});
|
|
52
|
+
return config;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
add_account = async(name, options)=>{
|
|
56
|
+
let acc = new Account(name, {...options, manager: this.manager, parent: this})
|
|
57
|
+
await acc.sync()
|
|
58
|
+
|
|
59
|
+
return acc
|
|
60
|
+
}
|
|
61
|
+
|
|
51
62
|
sync = async () => {
|
|
52
63
|
this.servers = new Array();
|
|
53
64
|
this.vm = new Virtual_machine(this);
|
|
65
|
+
this.aircode = new Compiler(this)
|
|
54
66
|
|
|
55
67
|
await this.chain.sync();
|
|
56
68
|
await this.vm.sync();
|
|
57
69
|
|
|
58
70
|
await register(this);
|
|
59
71
|
};
|
|
72
|
+
|
|
73
|
+
stringify = ()=>{
|
|
74
|
+
return {physical_address: this.physical_address, path: this.path, name: this.name, private: this.private}
|
|
75
|
+
}
|
|
60
76
|
}
|
|
61
77
|
|
|
62
78
|
export default Account;
|
package/Objects/Blockweb.js
CHANGED
|
@@ -1,36 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
class Blockweb{
|
|
2
|
+
constructor(mgr){
|
|
3
|
+
this.mgr = mgr;
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
constructor(manager) {
|
|
5
|
-
this.manager = manager;
|
|
6
|
-
|
|
7
|
-
this.chains = new Object();
|
|
8
|
-
this.listeners = new Object();
|
|
5
|
+
this.chains = new Object()
|
|
9
6
|
}
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
let
|
|
13
|
-
if (!
|
|
14
|
-
|
|
15
|
-
this.
|
|
8
|
+
set = async(physical_address, parent)=>{
|
|
9
|
+
let load = this.chains[physical_address]
|
|
10
|
+
if (!load){
|
|
11
|
+
load = {parents: new Object(), chains: new Array()}
|
|
12
|
+
this.chains[physical_address] = load
|
|
16
13
|
}
|
|
17
|
-
ls.push(config.server);
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
spli_get = async (address, account) => {
|
|
21
|
-
return this.get(address) || (await this.set(address, account));
|
|
22
|
-
};
|
|
23
14
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
15
|
+
load.parents[parent.physical_address] = parent;
|
|
16
|
+
let child = await parent.birth(physical_address)
|
|
17
|
+
load.chains.push(child)
|
|
27
18
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
await chain.sync();
|
|
31
|
-
|
|
32
|
-
return chain;
|
|
33
|
-
};
|
|
19
|
+
return child;
|
|
20
|
+
}
|
|
34
21
|
}
|
|
35
22
|
|
|
36
|
-
export default Blockweb
|
|
23
|
+
export default Blockweb
|