@mainsail/kernel 0.0.1-evm.2 → 0.0.1-evm.21

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 (208) hide show
  1. package/distribution/application.d.ts +2 -2
  2. package/distribution/application.d.ts.map +1 -1
  3. package/distribution/application.js +15 -12
  4. package/distribution/application.js.map +1 -1
  5. package/distribution/bootstrap/boot-service-providers.d.ts.map +1 -1
  6. package/distribution/bootstrap/boot-service-providers.js +5 -3
  7. package/distribution/bootstrap/boot-service-providers.js.map +1 -1
  8. package/distribution/bootstrap/load-service-providers.js +2 -2
  9. package/distribution/bootstrap/load-service-providers.js.map +1 -1
  10. package/distribution/bootstrap/register-base-bindings.d.ts.map +1 -1
  11. package/distribution/bootstrap/register-base-bindings.js +6 -6
  12. package/distribution/bootstrap/register-base-bindings.js.map +1 -1
  13. package/distribution/bootstrap/register-base-paths.d.ts.map +1 -1
  14. package/distribution/bootstrap/register-base-paths.js +4 -5
  15. package/distribution/bootstrap/register-base-paths.js.map +1 -1
  16. package/distribution/bootstrap/register-service-providers.d.ts.map +1 -1
  17. package/distribution/bootstrap/register-service-providers.js +7 -10
  18. package/distribution/bootstrap/register-service-providers.js.map +1 -1
  19. package/distribution/container.d.ts +2 -2
  20. package/distribution/container.d.ts.map +1 -1
  21. package/distribution/container.js.map +1 -1
  22. package/distribution/environment.d.ts.map +1 -1
  23. package/distribution/index.d.ts +0 -1
  24. package/distribution/index.d.ts.map +1 -1
  25. package/distribution/index.js +0 -1
  26. package/distribution/index.js.map +1 -1
  27. package/distribution/ipc/emit.d.ts.map +1 -1
  28. package/distribution/ipc/handler.d.ts +1 -1
  29. package/distribution/ipc/handler.d.ts.map +1 -1
  30. package/distribution/ipc/sub-process.d.ts +2 -3
  31. package/distribution/ipc/sub-process.d.ts.map +1 -1
  32. package/distribution/ipc/sub-process.js +24 -1
  33. package/distribution/ipc/sub-process.js.map +1 -1
  34. package/distribution/providers/service-provider-repository.d.ts.map +1 -1
  35. package/distribution/providers/service-provider-repository.js +2 -2
  36. package/distribution/providers/service-provider-repository.js.map +1 -1
  37. package/distribution/services/cache/drivers/memory.d.ts.map +1 -1
  38. package/distribution/services/cache/drivers/memory.js +6 -3
  39. package/distribution/services/cache/drivers/memory.js.map +1 -1
  40. package/distribution/services/cache/service-provider.d.ts.map +1 -1
  41. package/distribution/services/cache/service-provider.js +14 -3
  42. package/distribution/services/cache/service-provider.js.map +1 -1
  43. package/distribution/services/config/drivers/local.d.ts.map +1 -1
  44. package/distribution/services/config/drivers/local.js +1 -2
  45. package/distribution/services/config/drivers/local.js.map +1 -1
  46. package/distribution/services/config/repository.d.ts.map +1 -1
  47. package/distribution/services/config/repository.js +1 -2
  48. package/distribution/services/config/repository.js.map +1 -1
  49. package/distribution/services/events/drivers/memory.d.ts.map +1 -1
  50. package/distribution/services/events/drivers/memory.js +7 -2
  51. package/distribution/services/events/drivers/memory.js.map +1 -1
  52. package/distribution/services/events/manager.d.ts.map +1 -1
  53. package/distribution/services/events/manager.js +13 -2
  54. package/distribution/services/events/manager.js.map +1 -1
  55. package/distribution/services/events/service-provider.d.ts.map +1 -1
  56. package/distribution/services/events/service-provider.js +14 -3
  57. package/distribution/services/events/service-provider.js.map +1 -1
  58. package/distribution/services/filesystem/drivers/local.d.ts +0 -2
  59. package/distribution/services/filesystem/drivers/local.d.ts.map +1 -1
  60. package/distribution/services/filesystem/drivers/null.d.ts +0 -2
  61. package/distribution/services/filesystem/drivers/null.d.ts.map +1 -1
  62. package/distribution/services/filesystem/manager.d.ts.map +1 -1
  63. package/distribution/services/filesystem/manager.js +13 -2
  64. package/distribution/services/filesystem/manager.js.map +1 -1
  65. package/distribution/services/filesystem/service-provider.d.ts.map +1 -1
  66. package/distribution/services/filesystem/service-provider.js +14 -3
  67. package/distribution/services/filesystem/service-provider.js.map +1 -1
  68. package/distribution/services/log/drivers/memory.d.ts +1 -0
  69. package/distribution/services/log/drivers/memory.d.ts.map +1 -1
  70. package/distribution/services/log/drivers/memory.js +3 -0
  71. package/distribution/services/log/drivers/memory.js.map +1 -1
  72. package/distribution/services/log/drivers/null.d.ts +1 -0
  73. package/distribution/services/log/drivers/null.d.ts.map +1 -1
  74. package/distribution/services/log/drivers/null.js +3 -0
  75. package/distribution/services/log/drivers/null.js.map +1 -1
  76. package/distribution/services/log/manager.d.ts.map +1 -1
  77. package/distribution/services/log/manager.js +13 -2
  78. package/distribution/services/log/manager.js.map +1 -1
  79. package/distribution/services/log/service-provider.d.ts.map +1 -1
  80. package/distribution/services/log/service-provider.js +14 -3
  81. package/distribution/services/log/service-provider.js.map +1 -1
  82. package/distribution/services/pipeline/drivers/memory.d.ts +5 -5
  83. package/distribution/services/pipeline/drivers/memory.d.ts.map +1 -1
  84. package/distribution/services/pipeline/drivers/memory.js +12 -12
  85. package/distribution/services/pipeline/drivers/memory.js.map +1 -1
  86. package/distribution/services/pipeline/drivers/null.d.ts +3 -4
  87. package/distribution/services/pipeline/drivers/null.d.ts.map +1 -1
  88. package/distribution/services/pipeline/drivers/null.js +0 -3
  89. package/distribution/services/pipeline/drivers/null.js.map +1 -1
  90. package/distribution/services/pipeline/service-provider.d.ts.map +1 -1
  91. package/distribution/services/pipeline/service-provider.js +14 -5
  92. package/distribution/services/pipeline/service-provider.js.map +1 -1
  93. package/distribution/services/queue/drivers/memory.d.ts +0 -1
  94. package/distribution/services/queue/drivers/memory.d.ts.map +1 -1
  95. package/distribution/services/queue/drivers/memory.js +1 -2
  96. package/distribution/services/queue/drivers/memory.js.map +1 -1
  97. package/distribution/services/queue/drivers/null.d.ts +0 -1
  98. package/distribution/services/queue/drivers/null.d.ts.map +1 -1
  99. package/distribution/services/queue/drivers/null.js +1 -2
  100. package/distribution/services/queue/drivers/null.js.map +1 -1
  101. package/distribution/services/queue/service-provider.d.ts.map +1 -1
  102. package/distribution/services/queue/service-provider.js +14 -5
  103. package/distribution/services/queue/service-provider.js.map +1 -1
  104. package/distribution/services/schedule/block-job.d.ts +1 -1
  105. package/distribution/services/schedule/block-job.d.ts.map +1 -1
  106. package/distribution/services/schedule/block-job.js +2 -2
  107. package/distribution/services/schedule/block-job.js.map +1 -1
  108. package/distribution/services/schedule/listeners.d.ts +1 -1
  109. package/distribution/services/schedule/listeners.d.ts.map +1 -1
  110. package/distribution/services/schedule/listeners.js.map +1 -1
  111. package/distribution/services/schedule/service-provider.d.ts.map +1 -1
  112. package/distribution/services/schedule/service-provider.js +13 -2
  113. package/distribution/services/schedule/service-provider.js.map +1 -1
  114. package/distribution/services/triggers/action.d.ts +6 -4
  115. package/distribution/services/triggers/action.d.ts.map +1 -1
  116. package/distribution/services/triggers/action.js.map +1 -1
  117. package/distribution/services/triggers/service-provider.d.ts.map +1 -1
  118. package/distribution/services/triggers/service-provider.js +13 -2
  119. package/distribution/services/triggers/service-provider.js.map +1 -1
  120. package/distribution/services/triggers/triggers.d.ts +4 -4
  121. package/distribution/services/triggers/triggers.d.ts.map +1 -1
  122. package/distribution/services/triggers/triggers.js +6 -2
  123. package/distribution/services/triggers/triggers.js.map +1 -1
  124. package/distribution/services/validation/manager.d.ts.map +1 -1
  125. package/distribution/services/validation/manager.js +13 -2
  126. package/distribution/services/validation/manager.js.map +1 -1
  127. package/distribution/services/validation/service-provider.d.ts.map +1 -1
  128. package/distribution/services/validation/service-provider.js +14 -3
  129. package/distribution/services/validation/service-provider.js.map +1 -1
  130. package/distribution/support/class-manager.d.ts.map +1 -1
  131. package/distribution/support/class-manager.js +1 -2
  132. package/distribution/support/class-manager.js.map +1 -1
  133. package/distribution/support/instance-manager.d.ts.map +1 -1
  134. package/distribution/support/instance-manager.js +1 -1
  135. package/distribution/support/instance-manager.js.map +1 -1
  136. package/distribution/types/container.d.ts +1 -1
  137. package/distribution/types/container.d.ts.map +1 -1
  138. package/distribution/types/index.d.ts +1 -1
  139. package/distribution/types/index.d.ts.map +1 -1
  140. package/package.json +17 -20
  141. package/distribution/services/mixins/index.d.ts +0 -2
  142. package/distribution/services/mixins/index.d.ts.map +0 -1
  143. package/distribution/services/mixins/index.js +0 -2
  144. package/distribution/services/mixins/index.js.map +0 -1
  145. package/distribution/services/mixins/mixins.d.ts +0 -10
  146. package/distribution/services/mixins/mixins.d.ts.map +0 -1
  147. package/distribution/services/mixins/mixins.js +0 -50
  148. package/distribution/services/mixins/mixins.js.map +0 -1
  149. package/distribution/services/mixins/service-provider.d.ts +0 -5
  150. package/distribution/services/mixins/service-provider.d.ts.map +0 -1
  151. package/distribution/services/mixins/service-provider.js +0 -9
  152. package/distribution/services/mixins/service-provider.js.map +0 -1
  153. package/distribution/utils/assert.d.ts +0 -16
  154. package/distribution/utils/assert.d.ts.map +0 -1
  155. package/distribution/utils/assert.js +0 -24
  156. package/distribution/utils/assert.js.map +0 -1
  157. package/distribution/utils/calculate-forging-info.d.ts +0 -10
  158. package/distribution/utils/calculate-forging-info.d.ts.map +0 -1
  159. package/distribution/utils/calculate-forging-info.js +0 -24
  160. package/distribution/utils/calculate-forging-info.js.map +0 -1
  161. package/distribution/utils/format-currency.d.ts +0 -4
  162. package/distribution/utils/format-currency.d.ts.map +0 -1
  163. package/distribution/utils/format-currency.js +0 -9
  164. package/distribution/utils/format-currency.js.map +0 -1
  165. package/distribution/utils/index.d.ts +0 -24
  166. package/distribution/utils/index.d.ts.map +0 -1
  167. package/distribution/utils/index.js +0 -19
  168. package/distribution/utils/index.js.map +0 -1
  169. package/distribution/utils/ip-address.d.ts +0 -5
  170. package/distribution/utils/ip-address.d.ts.map +0 -1
  171. package/distribution/utils/ip-address.js +0 -18
  172. package/distribution/utils/ip-address.js.map +0 -1
  173. package/distribution/utils/is-blacklisted.d.ts +0 -2
  174. package/distribution/utils/is-blacklisted.d.ts.map +0 -1
  175. package/distribution/utils/is-blacklisted.js +0 -17
  176. package/distribution/utils/is-blacklisted.js.map +0 -1
  177. package/distribution/utils/is-block-chained.d.ts +0 -4
  178. package/distribution/utils/is-block-chained.d.ts.map +0 -1
  179. package/distribution/utils/is-block-chained.js +0 -29
  180. package/distribution/utils/is-block-chained.js.map +0 -1
  181. package/distribution/utils/is-majority.d.ts +0 -2
  182. package/distribution/utils/is-majority.d.ts.map +0 -1
  183. package/distribution/utils/is-majority.js +0 -2
  184. package/distribution/utils/is-majority.js.map +0 -1
  185. package/distribution/utils/is-minority.d.ts +0 -2
  186. package/distribution/utils/is-minority.d.ts.map +0 -1
  187. package/distribution/utils/is-minority.js +0 -2
  188. package/distribution/utils/is-minority.js.map +0 -1
  189. package/distribution/utils/is-whitelisted.d.ts +0 -2
  190. package/distribution/utils/is-whitelisted.d.ts.map +0 -1
  191. package/distribution/utils/is-whitelisted.js +0 -17
  192. package/distribution/utils/is-whitelisted.js.map +0 -1
  193. package/distribution/utils/lock.d.ts +0 -7
  194. package/distribution/utils/lock.d.ts.map +0 -1
  195. package/distribution/utils/lock.js +0 -60
  196. package/distribution/utils/lock.js.map +0 -1
  197. package/distribution/utils/round-calculator.d.ts +0 -4
  198. package/distribution/utils/round-calculator.d.ts.map +0 -1
  199. package/distribution/utils/round-calculator.js +0 -63
  200. package/distribution/utils/round-calculator.js.map +0 -1
  201. package/distribution/utils/supply-calculator.d.ts +0 -4
  202. package/distribution/utils/supply-calculator.d.ts.map +0 -1
  203. package/distribution/utils/supply-calculator.js +0 -26
  204. package/distribution/utils/supply-calculator.js.map +0 -1
  205. package/distribution/utils/timestamp-calculator.d.ts +0 -3
  206. package/distribution/utils/timestamp-calculator.d.ts.map +0 -1
  207. package/distribution/utils/timestamp-calculator.js +0 -18
  208. package/distribution/utils/timestamp-calculator.js.map +0 -1
@@ -1,29 +0,0 @@
1
- const getBlockChainedDetails = (previousBlock, nextBlock) => {
2
- const followsPrevious = nextBlock.previousBlock === previousBlock.id;
3
- const isPlusOne = nextBlock.height === previousBlock.height + 1;
4
- const isAfterPrevious = previousBlock.timestamp < nextBlock.timestamp;
5
- const isChained = followsPrevious && isPlusOne && isAfterPrevious;
6
- return { followsPrevious, isAfterPrevious, isChained, isPlusOne };
7
- };
8
- export const isBlockChained = (previousBlock, nextBlock) => getBlockChainedDetails(previousBlock, nextBlock).isChained;
9
- export const getBlockNotChainedErrorMessage = (previousBlock, nextBlock) => {
10
- const details = getBlockChainedDetails(previousBlock, nextBlock);
11
- if (details.isChained) {
12
- throw new Error("Block had no chain error");
13
- }
14
- const messagePrefix = `Block { height: ${nextBlock.height}, id: ${nextBlock.id}, ` +
15
- `previousBlock: ${nextBlock.previousBlock} } is not chained to the ` +
16
- `previous block { height: ${previousBlock.height}, id: ${previousBlock.id} }`;
17
- let messageDetail;
18
- if (!details.followsPrevious) {
19
- messageDetail = `previous block id mismatch`;
20
- }
21
- else if (!details.isPlusOne) {
22
- messageDetail = `height is not plus one`;
23
- }
24
- else if (!details.isAfterPrevious) {
25
- messageDetail = `previous timestamp is after current timestamp: ${previousBlock.timestamp} VS ${nextBlock.timestamp}`;
26
- }
27
- return `${messagePrefix}: ${messageDetail}`;
28
- };
29
- //# sourceMappingURL=is-block-chained.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-block-chained.js","sourceRoot":"","sources":["../../source/utils/is-block-chained.ts"],"names":[],"mappings":"AASA,MAAM,sBAAsB,GAAG,CAC9B,aAAyC,EACzC,SAAqC,EACf,EAAE;IACxB,MAAM,eAAe,GAAY,SAAS,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE,CAAC;IAC9E,MAAM,SAAS,GAAY,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzE,MAAM,eAAe,GAAY,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAE/E,MAAM,SAAS,GAAY,eAAe,IAAI,SAAS,IAAI,eAAe,CAAC;IAE3E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,aAAyC,EACzC,SAAqC,EAC3B,EAAE,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC;AAEzE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC7C,aAAyC,EACzC,SAAqC,EAC5B,EAAE;IACX,MAAM,OAAO,GAAwB,sBAAsB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAEtF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,aAAa,GAClB,mBAAmB,SAAS,CAAC,MAAM,SAAS,SAAS,CAAC,EAAE,IAAI;QAC5D,kBAAkB,SAAS,CAAC,aAAa,2BAA2B;QACpE,4BAA4B,aAAa,CAAC,MAAM,SAAS,aAAa,CAAC,EAAE,IAAI,CAAC;IAE/E,IAAI,aAAiC,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC9B,aAAa,GAAG,4BAA4B,CAAC;IAC9C,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/B,aAAa,GAAG,wBAAwB,CAAC;IAC1C,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACrC,aAAa,GAAG,kDAAkD,aAAa,CAAC,SAAS,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IACvH,CAAC;IAED,OAAO,GAAG,aAAa,KAAK,aAAa,EAAE,CAAC;AAC7C,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const isMajority: (size: number, activeValidators: number) => boolean;
2
- //# sourceMappingURL=is-majority.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-majority.d.ts","sourceRoot":"","sources":["../../source/utils/is-majority.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,SAAU,MAAM,oBAAoB,MAAM,KAAG,OAA4C,CAAC"}
@@ -1,2 +0,0 @@
1
- export const isMajority = (size, activeValidators) => size > (activeValidators / 3) * 2;
2
- //# sourceMappingURL=is-majority.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-majority.js","sourceRoot":"","sources":["../../source/utils/is-majority.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,gBAAwB,EAAW,EAAE,CAAC,IAAI,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const isMinority: (size: number, activeValidators: number) => boolean;
2
- //# sourceMappingURL=is-minority.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-minority.d.ts","sourceRoot":"","sources":["../../source/utils/is-minority.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,SAAU,MAAM,oBAAoB,MAAM,KAAG,OAAsC,CAAC"}
@@ -1,2 +0,0 @@
1
- export const isMinority = (size, activeValidators) => size > activeValidators / 3;
2
- //# sourceMappingURL=is-minority.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-minority.js","sourceRoot":"","sources":["../../source/utils/is-minority.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,gBAAwB,EAAW,EAAE,CAAC,IAAI,GAAG,gBAAgB,GAAG,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const isWhitelisted: (whitelist: string[], remoteAddress: string) => boolean;
2
- //# sourceMappingURL=is-whitelisted.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-whitelisted.d.ts","sourceRoot":"","sources":["../../source/utils/is-whitelisted.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,cAAe,MAAM,EAAE,iBAAiB,MAAM,KAAG,OAc1E,CAAC"}
@@ -1,17 +0,0 @@
1
- import nm from "nanomatch";
2
- // @TODO review the implementation
3
- export const isWhitelisted = (whitelist, remoteAddress) => {
4
- if (!Array.isArray(whitelist) || whitelist.length === 0) {
5
- return true;
6
- }
7
- for (const ip of whitelist) {
8
- try {
9
- if (nm.isMatch(remoteAddress, ip)) {
10
- return true;
11
- }
12
- }
13
- catch { }
14
- }
15
- return false;
16
- };
17
- //# sourceMappingURL=is-whitelisted.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-whitelisted.js","sourceRoot":"","sources":["../../source/utils/is-whitelisted.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,kCAAkC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAmB,EAAE,aAAqB,EAAW,EAAE;IACpF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC;YACJ,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- import { Contracts } from "@mainsail/contracts";
2
- export declare class Lock implements Contracts.Kernel.Lock {
3
- #private;
4
- runNonExclusive<T>(callback: () => Promise<T>): Promise<T>;
5
- runExclusive<T>(callback: () => Promise<T>): Promise<T>;
6
- }
7
- //# sourceMappingURL=lock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../source/utils/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,IAAK,YAAW,SAAS,CAAC,MAAM,CAAC,IAAI;;IAKpC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB1D,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA0BpE"}
@@ -1,60 +0,0 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7
- if (kind === "m") throw new TypeError("Private method is not writable");
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
- };
12
- var _Lock_exclusivePromise, _Lock_nonExclusivePromises;
13
- export class Lock {
14
- constructor() {
15
- _Lock_exclusivePromise.set(this, void 0);
16
- _Lock_nonExclusivePromises.set(this, new Set());
17
- }
18
- async runNonExclusive(callback) {
19
- while (__classPrivateFieldGet(this, _Lock_exclusivePromise, "f")) {
20
- try {
21
- await __classPrivateFieldGet(this, _Lock_exclusivePromise, "f");
22
- }
23
- catch { }
24
- }
25
- const nonExclusivePromise = callback();
26
- try {
27
- __classPrivateFieldGet(this, _Lock_nonExclusivePromises, "f").add(nonExclusivePromise);
28
- return await nonExclusivePromise;
29
- }
30
- finally {
31
- __classPrivateFieldGet(this, _Lock_nonExclusivePromises, "f").delete(nonExclusivePromise);
32
- }
33
- }
34
- async runExclusive(callback) {
35
- while (__classPrivateFieldGet(this, _Lock_exclusivePromise, "f")) {
36
- try {
37
- await __classPrivateFieldGet(this, _Lock_exclusivePromise, "f");
38
- }
39
- catch { }
40
- }
41
- const exclusivePromise = (async () => {
42
- await Promise.all([...__classPrivateFieldGet(this, _Lock_nonExclusivePromises, "f")].map(async (nonExclusivePromise) => {
43
- try {
44
- await nonExclusivePromise;
45
- }
46
- catch { }
47
- }));
48
- return await callback();
49
- })();
50
- try {
51
- __classPrivateFieldSet(this, _Lock_exclusivePromise, exclusivePromise, "f");
52
- return await exclusivePromise;
53
- }
54
- finally {
55
- __classPrivateFieldSet(this, _Lock_exclusivePromise, undefined, "f");
56
- }
57
- }
58
- }
59
- _Lock_exclusivePromise = new WeakMap(), _Lock_nonExclusivePromises = new WeakMap();
60
- //# sourceMappingURL=lock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../source/utils/lock.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,MAAM,OAAO,IAAI;IAAjB;QACC,yCAAqC;QAE5B,qCAA+C,IAAI,GAAG,EAAoB,EAAC;IA6CrF,CAAC;IA3CO,KAAK,CAAC,eAAe,CAAI,QAA0B;QACzD,OAAO,uBAAA,IAAI,8BAAkB,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACJ,MAAM,uBAAA,IAAI,8BAAkB,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QAED,MAAM,mBAAmB,GAAG,QAAQ,EAAE,CAAC;QAEvC,IAAI,CAAC;YACJ,uBAAA,IAAI,kCAAsB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACpD,OAAO,MAAM,mBAAmB,CAAC;QAClC,CAAC;gBAAS,CAAC;YACV,uBAAA,IAAI,kCAAsB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,YAAY,CAAI,QAA0B;QACtD,OAAO,uBAAA,IAAI,8BAAkB,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACJ,MAAM,uBAAA,IAAI,8BAAkB,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QAED,MAAM,gBAAgB,GAAG,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,uBAAA,IAAI,kCAAsB,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE;gBACjE,IAAI,CAAC;oBACJ,MAAM,mBAAmB,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC,CAAC,CACF,CAAC;YAEF,OAAO,MAAM,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC;YACJ,uBAAA,IAAI,0BAAqB,gBAAgB,MAAA,CAAC;YAC1C,OAAO,MAAM,gBAAgB,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACV,uBAAA,IAAI,0BAAqB,SAAS,MAAA,CAAC;QACpC,CAAC;IACF,CAAC;CACD"}
@@ -1,4 +0,0 @@
1
- import { Contracts } from "@mainsail/contracts";
2
- export declare const isNewRound: (height: number, configuration: Contracts.Crypto.Configuration) => boolean;
3
- export declare const calculateRound: (height: number, configuration: Contracts.Crypto.Configuration) => Contracts.Shared.RoundInfo;
4
- //# sourceMappingURL=round-calculator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"round-calculator.d.ts","sourceRoot":"","sources":["../../source/utils/round-calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,qBAAqB,CAAC;AAK5D,eAAO,MAAM,UAAU,WAAY,MAAM,iBAAiB,UAAU,MAAM,CAAC,aAAa,KAAG,OAmB1F,CAAC;AAEF,eAAO,MAAM,cAAc,WAClB,MAAM,iBACC,UAAU,MAAM,CAAC,aAAa,KAC3C,UAAU,MAAM,CAAC,SAqDnB,CAAC"}
@@ -1,63 +0,0 @@
1
- import { Exceptions } from "@mainsail/contracts";
2
- import { assert } from "./assert.js";
3
- import { getMilestonesWhichAffectActiveValidatorCount } from "./calculate-forging-info.js";
4
- export const isNewRound = (height, configuration) => {
5
- const milestones = configuration.get("milestones");
6
- // Since milestones are merged, find the first milestone to introduce the validator count.
7
- let milestone;
8
- for (let index = milestones.length - 1; index >= 0; index--) {
9
- const temporary = milestones[index];
10
- if (temporary.height > height) {
11
- continue;
12
- }
13
- if (!milestone || temporary.activeValidators === milestone.activeValidators) {
14
- milestone = temporary;
15
- }
16
- else {
17
- break;
18
- }
19
- }
20
- return height === 0 || (height - Math.max(milestone.height, 1)) % milestone.activeValidators === 0;
21
- };
22
- export const calculateRound = (height, configuration) => {
23
- let nextMilestone = configuration.getNextMilestoneWithNewKey(0, "activeValidators");
24
- let activeValidators = configuration.getMilestone(0).activeValidators;
25
- // Genesis round requires special treatment
26
- if (height === 0) {
27
- return { maxValidators: 0, nextRound: 1, round: 0, roundHeight: 0 };
28
- }
29
- const result = {
30
- maxValidators: 0,
31
- nextRound: 0,
32
- round: 1,
33
- roundHeight: 1,
34
- };
35
- let milestoneHeight = 0;
36
- const milestones = getMilestonesWhichAffectActiveValidatorCount(configuration);
37
- for (let index = 0; index < milestones.length - 1; index++) {
38
- if (height < nextMilestone.height) {
39
- break;
40
- }
41
- const spanHeight = nextMilestone.height - milestoneHeight - 1;
42
- if (milestoneHeight > 0 && spanHeight % activeValidators !== 0) {
43
- throw new Exceptions.InvalidMilestoneConfigurationError(`Bad milestone at height: ${height}. The number of validators can only be changed at the beginning of a new round.`);
44
- }
45
- result.round += spanHeight / Math.max(1, activeValidators);
46
- result.roundHeight = nextMilestone.height;
47
- assert.defined(nextMilestone.data);
48
- result.maxValidators = nextMilestone.data;
49
- activeValidators = nextMilestone.data;
50
- milestoneHeight = nextMilestone.height - 1;
51
- nextMilestone = configuration.getNextMilestoneWithNewKey(nextMilestone.height, "activeValidators");
52
- }
53
- const minActiveValidators = Math.max(1, activeValidators);
54
- const heightFromLastSpan = height - milestoneHeight - 1;
55
- const roundIncrease = Math.floor(heightFromLastSpan / minActiveValidators);
56
- const nextRoundIncrease = (heightFromLastSpan + 1) % minActiveValidators === 0 ? 1 : 0;
57
- result.round += roundIncrease;
58
- result.roundHeight += roundIncrease * minActiveValidators;
59
- result.nextRound = result.round + nextRoundIncrease;
60
- result.maxValidators = minActiveValidators;
61
- return result;
62
- };
63
- //# sourceMappingURL=round-calculator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"round-calculator.js","sourceRoot":"","sources":["../../source/utils/round-calculator.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { Contracts } from "@mainsail/contracts";
2
- import { BigNumber } from "@mainsail/utils";
3
- export declare const calculateSupply: (height: number, configuration: Contracts.Crypto.Configuration) => BigNumber;
4
- //# sourceMappingURL=supply-calculator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supply-calculator.d.ts","sourceRoot":"","sources":["../../source/utils/supply-calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,eAAe,WAAY,MAAM,iBAAiB,UAAU,MAAM,CAAC,aAAa,KAAG,SA+B/F,CAAC"}
@@ -1,26 +0,0 @@
1
- import { BigNumber } from "@mainsail/utils";
2
- export const calculateSupply = (height, configuration) => {
3
- const initialSupply = BigNumber.make(configuration.get("genesisBlock.block.totalAmount"));
4
- const milestones = configuration.get("milestones");
5
- if (height === 0 || milestones.length === 0) {
6
- return initialSupply;
7
- }
8
- let accumulatedRewards = BigNumber.ZERO;
9
- let currentHeight = 0;
10
- let constantIndex = 0;
11
- while (currentHeight < height) {
12
- const constants = milestones[constantIndex];
13
- const nextConstants = milestones[constantIndex + 1];
14
- let heightJump = height - currentHeight;
15
- if (nextConstants && height >= nextConstants.height && currentHeight < nextConstants.height - 1) {
16
- heightJump = nextConstants.height - 1 - currentHeight;
17
- constantIndex += 1;
18
- }
19
- currentHeight += heightJump;
20
- if (currentHeight >= constants.height) {
21
- accumulatedRewards = accumulatedRewards.plus(BigNumber.make(constants.reward).times(heightJump));
22
- }
23
- }
24
- return initialSupply.plus(accumulatedRewards);
25
- };
26
- //# sourceMappingURL=supply-calculator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supply-calculator.js","sourceRoot":"","sources":["../../source/utils/supply-calculator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,aAA6C,EAAa,EAAE;IAC3G,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE1F,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,IAAI,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC;IACxC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,OAAO,aAAa,GAAG,MAAM,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QAEpD,IAAI,UAAU,GAAW,MAAM,GAAG,aAAa,CAAC;QAEhD,IAAI,aAAa,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjG,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC;YACtD,aAAa,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,aAAa,IAAI,UAAU,CAAC;QAE5B,IAAI,aAAa,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACvC,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAClG,CAAC;IACF,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC/C,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Contracts } from "@mainsail/contracts";
2
- export declare const calculateMinimalTimestamp: (previousBlock: Contracts.Crypto.Block, round: number, configuration: Contracts.Crypto.Configuration) => number;
3
- //# sourceMappingURL=timestamp-calculator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timestamp-calculator.d.ts","sourceRoot":"","sources":["../../source/utils/timestamp-calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,eAAO,MAAM,yBAAyB,kBACtB,UAAU,MAAM,CAAC,KAAK,SAC9B,MAAM,iBACE,UAAU,MAAM,CAAC,aAAa,KAC3C,MAoBF,CAAC"}
@@ -1,18 +0,0 @@
1
- export const calculateMinimalTimestamp = (previousBlock, round, configuration) => {
2
- // Hard limit to prevent overflow
3
- if (round > 100_000) {
4
- throw new Error(`Round ${round} is too high`);
5
- }
6
- const milestone = configuration.getMilestone(previousBlock.data.height + 1);
7
- const roundForMath = Math.max(0, round - 1);
8
- return (previousBlock.data.timestamp +
9
- // Append block time
10
- milestone.timeouts.blockTime +
11
- // Round timeout without increase
12
- round * milestone.timeouts.stageTimeout +
13
- // Add increase for each round. Using arithmetic progression formula
14
- 0.5 *
15
- roundForMath *
16
- (2 * milestone.timeouts.stageTimeoutIncrease + (roundForMath - 1) * milestone.timeouts.stageTimeoutIncrease));
17
- };
18
- //# sourceMappingURL=timestamp-calculator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timestamp-calculator.js","sourceRoot":"","sources":["../../source/utils/timestamp-calculator.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,aAAqC,EACrC,KAAa,EACb,aAA6C,EACpC,EAAE;IACX,iCAAiC;IACjC,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAE5C,OAAO,CACN,aAAa,CAAC,IAAI,CAAC,SAAS;QAC5B,oBAAoB;QACpB,SAAS,CAAC,QAAQ,CAAC,SAAS;QAC5B,iCAAiC;QACjC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY;QACvC,oEAAoE;QACpE,GAAG;YACF,YAAY;YACZ,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAC7G,CAAC;AACH,CAAC,CAAC"}