godprotocol 1.1.2 → 1.1.31

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/num.js CHANGED
@@ -1,10 +1,180 @@
1
1
  import Storage from "./functions/storage";
2
2
 
3
3
  class Num extends Storage {
4
- constructor(value) {
5
- super();
4
+ constructor(config, manager) {
5
+ super(manager)
6
6
 
7
- this.value = value;
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(value) {
5
- super();
4
+ constructor(config, manager) {
5
+ super(manager)
6
6
 
7
- this.value = value;
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(value) {
5
- super();
4
+ constructor(config, manager) {
5
+ super(manager);
6
6
 
7
- this.value = value;
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
@@ -1,10 +1,10 @@
1
1
  import Storage from "./functions/storage";
2
2
 
3
3
  class Voi extends Storage {
4
- constructor(value) {
5
- super();
4
+ constructor(config, manager) {
5
+ super(config, manager);
6
6
 
7
- this.value = value;
7
+ this.value = null;
8
8
  }
9
9
  }
10
10
 
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;
@@ -1,62 +1,135 @@
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";
4
5
 
5
- class Account {
6
+ class Account extends Utils {
6
7
  constructor(name, options) {
8
+ super();
9
+
7
10
  this.name = name;
8
11
 
9
12
  this.manager = options.manager;
13
+ this.parent = options.parent || this;
10
14
  this.repository = this.manager.repository;
15
+ this.account = this;
11
16
 
12
17
  this.physical_address = `Accounts/${name}`;
18
+ this.buffs = new Array();
19
+
20
+ this.chain = new Chain(this.physical_address, this.parent);
21
+ this.path = this.chain.path;
13
22
 
14
- this.chain = new Chain(this.physical_address, this);
23
+ console.log(`Account Created: ${this.name}`);
15
24
  }
16
25
 
17
- run = async (payload) => {
18
- let { physical_address, query } = payload;
26
+ load = async (payload) => {
27
+ let { sequence: codes, account, physical_address, options } = payload;
28
+
29
+ console.log(payload);
30
+ if (account && account !== this.name) {
31
+ account = await this.manager.get_account(account);
32
+ if (account) {
33
+ return await account.load(payload);
34
+ } else return { error: true, message: "Account not found!" };
35
+ }
19
36
 
20
- let chain = await this.vm.handle_chain(physical_address);
21
- let codes = await chain.read(query);
37
+ if (typeof codes === "string") {
38
+ codes = await this.compiler.to_sequence(codes, physical_address);
39
+ if (options) {
40
+ codes = codes[0].body[options.line];
41
+ }
42
+ }
43
+ if (Array.isArray(codes)) {
44
+ codes = codes[0];
45
+ }
46
+
47
+ physical_address = `${this.physical_address}/${physical_address}`;
48
+
49
+ let chain = await this.chain.chain(physical_address);
22
50
 
23
- await this.vm.execute(codes);
51
+ let res = { value: await chain.add_config(codes), type: "address" };
52
+
53
+ console.log(res, codes, chain.physical_address);
54
+ return res;
24
55
  };
25
56
 
26
- load = async (payload) => {
27
- let { sequence: codes, physical_address } = payload;
28
-
29
- for (let c = 0; c < codes.length; c++) {
30
- let instruction = codes[c];
31
-
32
- if (["function", "class"].includes(instruction.type)) {
33
- let addresses = await this.load({
34
- ...instruction,
35
- sequence: instruction.sequence,
36
- physical_address: instruction.physical_address,
37
- });
38
- instruction.sequence = addresses;
39
- }
57
+ run = async (payload) => {
58
+ let { physical_address, account, options } = payload;
59
+
60
+ let acc = (await this.manager.get_account(account)) || this;
61
+ let chain = await acc.chain.chain(
62
+ `${acc.physical_address}/${physical_address}`
63
+ );
64
+
65
+ console.log(chain.physical_address);
66
+ let config = await chain.read({ config: true });
67
+
68
+ if (options.env) {
69
+ let res = await this.load({
70
+ sequence: `env = ${JSON.stringify(options.env)}`,
71
+ physical_address: `${physical_address}`,
72
+ options: { line: 0 },
73
+ });
74
+ await this.vm.execute(res.value, { chain });
75
+ }
40
76
 
41
- let chain = await this.vm.handle_chain(instruction.physical_address);
42
- let block = await chain.write(instruction);
43
- codes[c] = block.address;
77
+ let res = await this.vm.execute(config, { chain, main: true });
78
+ if (options && options.literal) {
79
+ if (res.type === "address") {
80
+ let conf = await this.vm.resolve_address(res.value);
81
+ res = {
82
+ address: res,
83
+ literal: await (await this.vm.cloth_content(conf)).literal(),
84
+ };
85
+ }
44
86
  }
45
- let chain = await this.vm.handle_chain(physical_address);
46
- await chain.write({ ...payload, sequence: codes });
47
87
 
48
- return codes;
88
+ return res;
89
+ };
90
+
91
+ parse = async (payload) => {
92
+ let { account, physical_address, depth, history, query } = payload;
93
+
94
+ let acc = (await this.manager.get_account(account)) || this;
95
+ let chain = await acc.chain.chain(
96
+ `${acc.physical_address}/${physical_address}`
97
+ );
98
+
99
+ let config = await chain.read({ query, depth, history });
100
+ return config;
101
+ };
102
+
103
+ add_account = async (name, options) => {
104
+ let acc = new Account(name, {
105
+ ...options,
106
+ manager: this.manager,
107
+ parent: this,
108
+ });
109
+ await acc.sync();
110
+
111
+ return acc;
49
112
  };
50
113
 
51
114
  sync = async () => {
52
115
  this.servers = new Array();
53
116
  this.vm = new Virtual_machine(this);
117
+ this.compiler = new this.manager.compiler(this);
54
118
 
55
119
  await this.chain.sync();
56
120
  await this.vm.sync();
57
121
 
58
122
  await register(this);
59
123
  };
124
+
125
+ stringify = () => {
126
+ return {
127
+ physical_address: this.physical_address,
128
+ path: this.path,
129
+ name: this.name,
130
+ private: this.private,
131
+ };
132
+ };
60
133
  }
61
134
 
62
135
  export default Account;
@@ -1,36 +1,23 @@
1
- import Chain from "./Chain";
1
+ class Blockweb{
2
+ constructor(mgr){
3
+ this.mgr = mgr;
2
4
 
3
- class Blockweb {
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
- listen = async (physical_address, config) => {
12
- let ls = this.listeners[physical_address];
13
- if (!ls) {
14
- ls = new Array();
15
- this.listeners[physical_address] = ls;
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
- get = (address) => {
25
- return this.chains[address];
26
- };
15
+ load.parents[parent.physical_address] = parent;
16
+ let child = await parent.birth(physical_address)
17
+ load.chains.push(child)
27
18
 
28
- set = async (address, account) => {
29
- let chain = new Chain(address, account);
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