@shipload/sdk 1.0.0-next.63 → 1.0.0-next.64

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shipload/sdk",
3
3
  "description": "SDKs for Shipload",
4
- "version": "1.0.0-next.63",
4
+ "version": "1.0.0-next.64",
5
5
  "homepage": "https://github.com/shipload/toolkit/tree/master/packages/sdk",
6
6
  "repository": {
7
7
  "type": "git",
@@ -0,0 +1,170 @@
1
+ import type {Action, AssetType, NameType} from '@wharfkit/antelope'
2
+ import {ABI, Asset, Blob, Name, Struct} from '@wharfkit/antelope'
3
+ import type {ActionOptions, ContractArgs, PartialBy, Table} from '@wharfkit/contract'
4
+ import {Contract as BaseContract} from '@wharfkit/contract'
5
+ export const abiBlob = Blob.from(
6
+ 'DmVvc2lvOjphYmkvMS4yAAoHYWNjb3VudAABB2JhbGFuY2UFYXNzZXQFY2xvc2UAAgVvd25lcgRuYW1lBnN5bWJvbAZzeW1ib2wGY3JlYXRlAAIGaXNzdWVyBG5hbWUObWF4aW11bV9zdXBwbHkFYXNzZXQOY3VycmVuY3lfc3RhdHMAAwZzdXBwbHkFYXNzZXQKbWF4X3N1cHBseQVhc3NldAZpc3N1ZXIEbmFtZQVpc3N1ZQADAnRvBG5hbWUIcXVhbnRpdHkFYXNzZXQEbWVtbwZzdHJpbmcKaXNzdWVmaXhlZAADAnRvBG5hbWUGc3VwcGx5BWFzc2V0BG1lbW8Gc3RyaW5nBG9wZW4AAwVvd25lcgRuYW1lBnN5bWJvbAZzeW1ib2wJcmFtX3BheWVyBG5hbWUGcmV0aXJlAAIIcXVhbnRpdHkFYXNzZXQEbWVtbwZzdHJpbmcMc2V0bWF4c3VwcGx5AAIGaXNzdWVyBG5hbWUObWF4aW11bV9zdXBwbHkFYXNzZXQIdHJhbnNmZXIABARmcm9tBG5hbWUCdG8EbmFtZQhxdWFudGl0eQVhc3NldARtZW1vBnN0cmluZwgAAAAAAIVpRAVjbG9zZfkDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ2xvc2UgVG9rZW4gQmFsYW5jZQpzdW1tYXJ5OiAnQ2xvc2Uge3tub3dyYXAgb3duZXJ9feKAmXMgemVybyBxdWFudGl0eSBiYWxhbmNlJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvdG9rZW4ucG5nIzIwN2ZmNjhiMDQwNmVhYTU2NjE4YjA4YmRhODFkNmEwOTU0NTQzZjM2YWRjMzI4YWIzMDY1ZjMxYTVjNWQ2NTQKLS0tCgp7e293bmVyfX0gYWdyZWVzIHRvIGNsb3NlIHRoZWlyIHplcm8gcXVhbnRpdHkgYmFsYW5jZSBmb3IgdGhlIHt7c3ltYm9sX3RvX3N5bWJvbF9jb2RlIHN5bWJvbH19IHRva2VuLgoKUkFNIHdpbGwgYmUgcmVmdW5kZWQgdG8gdGhlIFJBTSBwYXllciBvZiB0aGUge3tzeW1ib2xfdG9fc3ltYm9sX2NvZGUgc3ltYm9sfX0gdG9rZW4gYmFsYW5jZSBmb3Ige3tvd25lcn19LgAAAACobNRFBmNyZWF0ZZoFLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ3JlYXRlIE5ldyBUb2tlbgpzdW1tYXJ5OiAnQ3JlYXRlIGEgbmV3IHRva2VuJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvdG9rZW4ucG5nIzIwN2ZmNjhiMDQwNmVhYTU2NjE4YjA4YmRhODFkNmEwOTU0NTQzZjM2YWRjMzI4YWIzMDY1ZjMxYTVjNWQ2NTQKLS0tCgp7eyRhY3Rpb24uYWNjb3VudH19IGFncmVlcyB0byBjcmVhdGUgYSBuZXcgdG9rZW4gd2l0aCBzeW1ib2wge3thc3NldF90b19zeW1ib2xfY29kZSBtYXhpbXVtX3N1cHBseX19IHRvIGJlIG1hbmFnZWQgYnkge3tpc3N1ZXJ9fS4KClRoaXMgYWN0aW9uIHdpbGwgbm90IHJlc3VsdCBhbnkgYW55IHRva2VucyBiZWluZyBpc3N1ZWQgaW50byBjaXJjdWxhdGlvbi4KCnt7aXNzdWVyfX0gd2lsbCBiZSBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyBpbnRvIGNpcmN1bGF0aW9uLCB1cCB0byBhIG1heGltdW0gc3VwcGx5IG9mIHt7bWF4aW11bV9zdXBwbHl9fS4KClJBTSB3aWxsIGRlZHVjdGVkIGZyb20ge3skYWN0aW9uLmFjY291bnR9feKAmXMgcmVzb3VyY2VzIHRvIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IHJlY29yZHMuAAAAAAClMXYFaXNzdWXuBy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IElzc3VlIFRva2VucyBpbnRvIENpcmN1bGF0aW9uCnN1bW1hcnk6ICdJc3N1ZSB7e25vd3JhcCBxdWFudGl0eX19IGludG8gY2lyY3VsYXRpb24gYW5kIHRyYW5zZmVyIGludG8ge3tub3dyYXAgdG99feKAmXMgYWNjb3VudCcKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3Rva2VuLnBuZyMyMDdmZjY4YjA0MDZlYWE1NjYxOGIwOGJkYTgxZDZhMDk1NDU0M2YzNmFkYzMyOGFiMzA2NWYzMWE1YzVkNjU0Ci0tLQoKVGhlIHRva2VuIG1hbmFnZXIgYWdyZWVzIHRvIGlzc3VlIHt7cXVhbnRpdHl9fSBpbnRvIGNpcmN1bGF0aW9uLCBhbmQgdHJhbnNmZXIgaXQgaW50byB7e3RvfX3igJlzIGFjY291bnQuCgp7eyNpZiBtZW1vfX1UaGVyZSBpcyBhIG1lbW8gYXR0YWNoZWQgdG8gdGhlIHRyYW5zZmVyIHN0YXRpbmc6Cnt7bWVtb319Cnt7L2lmfX0KCklmIHt7dG99fSBkb2VzIG5vdCBoYXZlIGEgYmFsYW5jZSBmb3Ige3thc3NldF90b19zeW1ib2xfY29kZSBxdWFudGl0eX19LCBvciB0aGUgdG9rZW4gbWFuYWdlciBkb2VzIG5vdCBoYXZlIGEgYmFsYW5jZSBmb3Ige3thc3NldF90b19zeW1ib2xfY29kZSBxdWFudGl0eX19LCB0aGUgdG9rZW4gbWFuYWdlciB3aWxsIGJlIGRlc2lnbmF0ZWQgYXMgdGhlIFJBTSBwYXllciBvZiB0aGUge3thc3NldF90b19zeW1ib2xfY29kZSBxdWFudGl0eX19IHRva2VuIGJhbGFuY2UgZm9yIHt7dG99fS4gQXMgYSByZXN1bHQsIFJBTSB3aWxsIGJlIGRlZHVjdGVkIGZyb20gdGhlIHRva2VuIG1hbmFnZXLigJlzIHJlc291cmNlcyB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSByZWNvcmRzLgoKVGhpcyBhY3Rpb24gZG9lcyBub3QgYWxsb3cgdGhlIHRvdGFsIHF1YW50aXR5IHRvIGV4Y2VlZCB0aGUgbWF4IGFsbG93ZWQgc3VwcGx5IG9mIHRoZSB0b2tlbi4AQFLdLaUxdgppc3N1ZWZpeGVkoQgtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBJc3N1ZSBGaXhlZCBTdXBwbHkgb2YgVG9rZW5zIGludG8gQ2lyY3VsYXRpb24Kc3VtbWFyeTogJ0lzc3VlIHVwIHRvIHt7bm93cmFwIHN1cHBseX19IHN1cHBseSBpbnRvIGNpcmN1bGF0aW9uIGFuZCB0cmFuc2ZlciBpbnRvIHt7bm93cmFwIHRvfX3igJlzIGFjY291bnQnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy90b2tlbi5wbmcjMjA3ZmY2OGIwNDA2ZWFhNTY2MThiMDhiZGE4MWQ2YTA5NTQ1NDNmMzZhZGMzMjhhYjMwNjVmMzFhNWM1ZDY1NAotLS0KClRoZSB0b2tlbiBtYW5hZ2VyIGFncmVlcyB0byBpc3N1ZSB0b2tlbnMgdXAgdG8ge3tzdXBwbHl9fSBmaXhlZCBzdXBwbHkgaW50byBjaXJjdWxhdGlvbiwgYW5kIHRyYW5zZmVyIGl0IGludG8ge3t0b3194oCZcyBhY2NvdW50LgoKe3sjaWYgbWVtb319VGhlcmUgaXMgYSBtZW1vIGF0dGFjaGVkIHRvIHRoZSB0cmFuc2ZlciBzdGF0aW5nOgp7e21lbW99fQp7ey9pZn19CgpJZiB7e3RvfX0gZG9lcyBub3QgaGF2ZSBhIGJhbGFuY2UgZm9yIHt7YXNzZXRfdG9fc3ltYm9sX2NvZGUgcXVhbnRpdHl9fSwgb3IgdGhlIHRva2VuIG1hbmFnZXIgZG9lcyBub3QgaGF2ZSBhIGJhbGFuY2UgZm9yIHt7YXNzZXRfdG9fc3ltYm9sX2NvZGUgcXVhbnRpdHl9fSwgdGhlIHRva2VuIG1hbmFnZXIgd2lsbCBiZSBkZXNpZ25hdGVkIGFzIHRoZSBSQU0gcGF5ZXIgb2YgdGhlIHt7YXNzZXRfdG9fc3ltYm9sX2NvZGUgcXVhbnRpdHl9fSB0b2tlbiBiYWxhbmNlIGZvciB7e3RvfX0uIEFzIGEgcmVzdWx0LCBSQU0gd2lsbCBiZSBkZWR1Y3RlZCBmcm9tIHRoZSB0b2tlbiBtYW5hZ2Vy4oCZcyByZXNvdXJjZXMgdG8gY3JlYXRlIHRoZSBuZWNlc3NhcnkgcmVjb3Jkcy4KClRoaXMgYWN0aW9uIGRvZXMgbm90IGFsbG93IHRoZSB0b3RhbCBxdWFudGl0eSB0byBleGNlZWQgdGhlIG1heCBhbGxvd2VkIHN1cHBseSBvZiB0aGUgdG9rZW4uAAAAAAAwVaUEb3BlbsYFLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogT3BlbiBUb2tlbiBCYWxhbmNlCnN1bW1hcnk6ICdPcGVuIGEgemVybyBxdWFudGl0eSBiYWxhbmNlIGZvciB7e25vd3JhcCBvd25lcn19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvdG9rZW4ucG5nIzIwN2ZmNjhiMDQwNmVhYTU2NjE4YjA4YmRhODFkNmEwOTU0NTQzZjM2YWRjMzI4YWIzMDY1ZjMxYTVjNWQ2NTQKLS0tCgp7e3JhbV9wYXllcn19IGFncmVlcyB0byBlc3RhYmxpc2ggYSB6ZXJvIHF1YW50aXR5IGJhbGFuY2UgZm9yIHt7b3duZXJ9fSBmb3IgdGhlIHt7c3ltYm9sX3RvX3N5bWJvbF9jb2RlIHN5bWJvbH19IHRva2VuLgoKSWYge3tvd25lcn19IGRvZXMgbm90IGhhdmUgYSBiYWxhbmNlIGZvciB7e3N5bWJvbF90b19zeW1ib2xfY29kZSBzeW1ib2x9fSwge3tyYW1fcGF5ZXJ9fSB3aWxsIGJlIGRlc2lnbmF0ZWQgYXMgdGhlIFJBTSBwYXllciBvZiB0aGUge3tzeW1ib2xfdG9fc3ltYm9sX2NvZGUgc3ltYm9sfX0gdG9rZW4gYmFsYW5jZSBmb3Ige3tvd25lcn19LiBBcyBhIHJlc3VsdCwgUkFNIHdpbGwgYmUgZGVkdWN0ZWQgZnJvbSB7e3JhbV9wYXllcn194oCZcyByZXNvdXJjZXMgdG8gY3JlYXRlIHRoZSBuZWNlc3NhcnkgcmVjb3Jkcy4AAAAAqOuyugZyZXRpcmXcAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFJlbW92ZSBUb2tlbnMgZnJvbSBDaXJjdWxhdGlvbgpzdW1tYXJ5OiAnUmVtb3ZlIHt7bm93cmFwIHF1YW50aXR5fX0gZnJvbSBjaXJjdWxhdGlvbicKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3Rva2VuLnBuZyMyMDdmZjY4YjA0MDZlYWE1NjYxOGIwOGJkYTgxZDZhMDk1NDU0M2YzNmFkYzMyOGFiMzA2NWYzMWE1YzVkNjU0Ci0tLQoKVGhlIHRva2VuIG1hbmFnZXIgYWdyZWVzIHRvIHJlbW92ZSB7e3F1YW50aXR5fX0gZnJvbSBjaXJjdWxhdGlvbiwgdGFrZW4gZnJvbSB0aGVpciBvd24gYWNjb3VudC4KCnt7I2lmIG1lbW99fSBUaGVyZSBpcyBhIG1lbW8gYXR0YWNoZWQgdG8gdGhlIGFjdGlvbiBzdGF0aW5nOgp7e21lbW99fQp7ey9pZn194GOtGncjs8IMc2V0bWF4c3VwcGx5wAMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBTZXQgTWF4IFN1cHBseQpzdW1tYXJ5OiAnU2V0IG1heCBzdXBwbHkgZm9yIHRva2VuJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvdG9rZW4ucG5nIzIwN2ZmNjhiMDQwNmVhYTU2NjE4YjA4YmRhODFkNmEwOTU0NTQzZjM2YWRjMzI4YWIzMDY1ZjMxYTVjNWQ2NTQKLS0tCgp7e2lzc3Vlcn19IHdpbGwgYmUgYWxsb3dlZCB0byBpc3N1ZSB0b2tlbnMgaW50byBjaXJjdWxhdGlvbiwgdXAgdG8gYSBtYXhpbXVtIHN1cHBseSBvZiB7e21heGltdW1fc3VwcGx5fX0uCgpUaGlzIGFjdGlvbiB3aWxsIG5vdCByZXN1bHQgYW55IGFueSB0b2tlbnMgYmVpbmcgaXNzdWVkIGludG8gY2lyY3VsYXRpb24uAAAAVy08zc0IdHJhbnNmZXK2By0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFRyYW5zZmVyIFRva2VucwpzdW1tYXJ5OiAnU2VuZCB7e25vd3JhcCBxdWFudGl0eX19IGZyb20ge3tub3dyYXAgZnJvbX19IHRvIHt7bm93cmFwIHRvfX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy90cmFuc2Zlci5wbmcjNWRmYWQwZGY3Mjc3MmVlMWNjYzE1NWU2NzBjMWQxMjRmNWM1MTIyZjFkNTAyNzU2NWRmMzhiNDE4MDQyZDFkZAotLS0KCnt7ZnJvbX19IGFncmVlcyB0byBzZW5kIHt7cXVhbnRpdHl9fSB0byB7e3RvfX0uCgp7eyNpZiBtZW1vfX1UaGVyZSBpcyBhIG1lbW8gYXR0YWNoZWQgdG8gdGhlIHRyYW5zZmVyIHN0YXRpbmc6Cnt7bWVtb319Cnt7L2lmfX0KCklmIHt7ZnJvbX19IGlzIG5vdCBhbHJlYWR5IHRoZSBSQU0gcGF5ZXIgb2YgdGhlaXIge3thc3NldF90b19zeW1ib2xfY29kZSBxdWFudGl0eX19IHRva2VuIGJhbGFuY2UsIHt7ZnJvbX19IHdpbGwgYmUgZGVzaWduYXRlZCBhcyBzdWNoLiBBcyBhIHJlc3VsdCwgUkFNIHdpbGwgYmUgZGVkdWN0ZWQgZnJvbSB7e2Zyb219feKAmXMgcmVzb3VyY2VzIHRvIHJlZnVuZCB0aGUgb3JpZ2luYWwgUkFNIHBheWVyLgoKSWYge3t0b319IGRvZXMgbm90IGhhdmUgYSBiYWxhbmNlIGZvciB7e2Fzc2V0X3RvX3N5bWJvbF9jb2RlIHF1YW50aXR5fX0sIHt7ZnJvbX19IHdpbGwgYmUgZGVzaWduYXRlZCBhcyB0aGUgUkFNIHBheWVyIG9mIHRoZSB7e2Fzc2V0X3RvX3N5bWJvbF9jb2RlIHF1YW50aXR5fX0gdG9rZW4gYmFsYW5jZSBmb3Ige3t0b319LiBBcyBhIHJlc3VsdCwgUkFNIHdpbGwgYmUgZGVkdWN0ZWQgZnJvbSB7e2Zyb219feKAmXMgcmVzb3VyY2VzIHRvIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IHJlY29yZHMuAgAAADhPTREyA2k2NAAAB2FjY291bnQAAAAAAJBNxgNpNjQAAA5jdXJyZW5jeV9zdGF0cwAAAAAA'
7
+ )
8
+ export const abi = ABI.from(abiBlob)
9
+ export namespace Types {
10
+ @Struct.type('account')
11
+ export class account extends Struct {
12
+ @Struct.field(Asset)
13
+ declare balance: Asset
14
+ }
15
+ @Struct.type('close')
16
+ export class close extends Struct {
17
+ @Struct.field(Name)
18
+ declare owner: Name
19
+ @Struct.field(Asset.Symbol)
20
+ declare symbol: Asset.Symbol
21
+ }
22
+ @Struct.type('create')
23
+ export class create extends Struct {
24
+ @Struct.field(Name)
25
+ declare issuer: Name
26
+ @Struct.field(Asset)
27
+ declare maximum_supply: Asset
28
+ }
29
+ @Struct.type('currency_stats')
30
+ export class currency_stats extends Struct {
31
+ @Struct.field(Asset)
32
+ declare supply: Asset
33
+ @Struct.field(Asset)
34
+ declare max_supply: Asset
35
+ @Struct.field(Name)
36
+ declare issuer: Name
37
+ }
38
+ @Struct.type('issue')
39
+ export class issue extends Struct {
40
+ @Struct.field(Name)
41
+ declare to: Name
42
+ @Struct.field(Asset)
43
+ declare quantity: Asset
44
+ @Struct.field('string')
45
+ declare memo: string
46
+ }
47
+ @Struct.type('issuefixed')
48
+ export class issuefixed extends Struct {
49
+ @Struct.field(Name)
50
+ declare to: Name
51
+ @Struct.field(Asset)
52
+ declare supply: Asset
53
+ @Struct.field('string')
54
+ declare memo: string
55
+ }
56
+ @Struct.type('open')
57
+ export class open extends Struct {
58
+ @Struct.field(Name)
59
+ declare owner: Name
60
+ @Struct.field(Asset.Symbol)
61
+ declare symbol: Asset.Symbol
62
+ @Struct.field(Name)
63
+ declare ram_payer: Name
64
+ }
65
+ @Struct.type('retire')
66
+ export class retire extends Struct {
67
+ @Struct.field(Asset)
68
+ declare quantity: Asset
69
+ @Struct.field('string')
70
+ declare memo: string
71
+ }
72
+ @Struct.type('setmaxsupply')
73
+ export class setmaxsupply extends Struct {
74
+ @Struct.field(Name)
75
+ declare issuer: Name
76
+ @Struct.field(Asset)
77
+ declare maximum_supply: Asset
78
+ }
79
+ @Struct.type('transfer')
80
+ export class transfer extends Struct {
81
+ @Struct.field(Name)
82
+ declare from: Name
83
+ @Struct.field(Name)
84
+ declare to: Name
85
+ @Struct.field(Asset)
86
+ declare quantity: Asset
87
+ @Struct.field('string')
88
+ declare memo: string
89
+ }
90
+ }
91
+ export const TableMap = {
92
+ accounts: Types.account,
93
+ stat: Types.currency_stats,
94
+ }
95
+ export interface TableTypes {
96
+ accounts: Types.account
97
+ stat: Types.currency_stats
98
+ }
99
+ export type RowType<T> = T extends keyof TableTypes ? TableTypes[T] : any
100
+ export type TableNames = keyof TableTypes
101
+ export namespace ActionParams {
102
+ export namespace Type {}
103
+ export interface close {
104
+ owner: NameType
105
+ symbol: Asset.SymbolType
106
+ }
107
+ export interface create {
108
+ issuer: NameType
109
+ maximum_supply: AssetType
110
+ }
111
+ export interface issue {
112
+ to: NameType
113
+ quantity: AssetType
114
+ memo: string
115
+ }
116
+ export interface issuefixed {
117
+ to: NameType
118
+ supply: AssetType
119
+ memo: string
120
+ }
121
+ export interface open {
122
+ owner: NameType
123
+ symbol: Asset.SymbolType
124
+ ram_payer: NameType
125
+ }
126
+ export interface retire {
127
+ quantity: AssetType
128
+ memo: string
129
+ }
130
+ export interface setmaxsupply {
131
+ issuer: NameType
132
+ maximum_supply: AssetType
133
+ }
134
+ export interface transfer {
135
+ from: NameType
136
+ to: NameType
137
+ quantity: AssetType
138
+ memo: string
139
+ }
140
+ }
141
+ export interface ActionNameParams {
142
+ close: ActionParams.close
143
+ create: ActionParams.create
144
+ issue: ActionParams.issue
145
+ issuefixed: ActionParams.issuefixed
146
+ open: ActionParams.open
147
+ retire: ActionParams.retire
148
+ setmaxsupply: ActionParams.setmaxsupply
149
+ transfer: ActionParams.transfer
150
+ }
151
+ export type ActionNames = keyof ActionNameParams
152
+ export class Contract extends BaseContract {
153
+ constructor(args: PartialBy<ContractArgs, 'abi' | 'account'>) {
154
+ super({
155
+ client: args.client,
156
+ abi: abi,
157
+ account: args.account || Name.from('eosio.token'),
158
+ })
159
+ }
160
+ action<T extends ActionNames>(
161
+ name: T,
162
+ data: ActionNameParams[T],
163
+ options?: ActionOptions
164
+ ): Action {
165
+ return super.action(name, data, options)
166
+ }
167
+ table<T extends TableNames>(name: T, scope?: NameType): Table<RowType<T>> {
168
+ return super.table(name, scope, TableMap[name])
169
+ }
170
+ }
package/src/contracts.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * as FundContract from './contracts/fund'
2
2
  export * as PlatformContract from './contracts/platform'
3
3
  export * as ServerContract from './contracts/server'
4
+ export * as TokenContract from './contracts/token'
@@ -0,0 +1,19 @@
1
+ import {describe, expect, test} from 'bun:test'
2
+ import {getItems, itemTypeIndex, typeLabel} from './catalog'
3
+
4
+ describe('itemTypeIndex', () => {
5
+ test('agrees with typeLabel for every item in the catalog', () => {
6
+ for (const item of getItems()) {
7
+ expect(typeLabel(itemTypeIndex(item.id))).toBe(typeLabel(item.type))
8
+ }
9
+ })
10
+
11
+ test('covers every type in the chain enum order', () => {
12
+ const indexes = new Set(getItems().map((item) => itemTypeIndex(item.id)))
13
+ expect([...indexes].sort()).toEqual([0, 1, 2, 3])
14
+ })
15
+
16
+ test('throws for an unknown item', () => {
17
+ expect(() => itemTypeIndex(65535)).toThrow()
18
+ })
19
+ })
@@ -106,6 +106,12 @@ const TYPE_LABEL_BY_STRING: Record<ItemType, string> = {
106
106
 
107
107
  const TYPE_BY_INDEX: ItemType[] = ['resource', 'component', 'module', 'entity']
108
108
 
109
+ export function itemTypeIndex(itemId: UInt16Type): number {
110
+ const index = TYPE_BY_INDEX.indexOf(getItem(itemId).type)
111
+ if (index < 0) throw new Error(`Unknown item type for item ${UInt16.from(itemId).toNumber()}`)
112
+ return index
113
+ }
114
+
109
115
  export function typeLabel(type: ItemType | number): string {
110
116
  if (typeof type === 'number') {
111
117
  const t = TYPE_BY_INDEX[type]
@@ -0,0 +1,42 @@
1
+ [
2
+ "Free",
3
+ "Civic",
4
+ "United",
5
+ "Sovereign",
6
+ "Common",
7
+ "Greater",
8
+ "Outer",
9
+ "Inner",
10
+ "New",
11
+ "Old",
12
+ "Grand",
13
+ "High",
14
+ "Deep",
15
+ "Bright",
16
+ "Open",
17
+ "Steadfast",
18
+ "Enduring",
19
+ "Rising",
20
+ "Standing",
21
+ "Unified",
22
+ "Allied",
23
+ "Independent",
24
+ "Provisional",
25
+ "Perpetual",
26
+ "Elder",
27
+ "Prime",
28
+ "Central",
29
+ "Frontier",
30
+ "Distant",
31
+ "Kindred",
32
+ "Mutual",
33
+ "Shared",
34
+ "Reformed",
35
+ "Restored",
36
+ "Second",
37
+ "Orbital",
38
+ "Solar",
39
+ "Verdant",
40
+ "Far",
41
+ "Wayward"
42
+ ]
@@ -0,0 +1,50 @@
1
+ [
2
+ "Collective",
3
+ "Compact",
4
+ "Concord",
5
+ "Union",
6
+ "Assembly",
7
+ "League",
8
+ "Accord",
9
+ "Commune",
10
+ "Congress",
11
+ "Coalition",
12
+ "Charter",
13
+ "Syndicate",
14
+ "Directorate",
15
+ "Movement",
16
+ "Pact",
17
+ "Circle",
18
+ "Council",
19
+ "Conclave",
20
+ "Convention",
21
+ "Federation",
22
+ "Confederacy",
23
+ "Alliance",
24
+ "Association",
25
+ "Fellowship",
26
+ "Order",
27
+ "Chapter",
28
+ "Guild",
29
+ "Consortium",
30
+ "Cooperative",
31
+ "Bloc",
32
+ "Front",
33
+ "Caucus",
34
+ "Chamber",
35
+ "Quorum",
36
+ "Covenant",
37
+ "Communion",
38
+ "Trust",
39
+ "Society",
40
+ "Company",
41
+ "Corps",
42
+ "Delegation",
43
+ "Ministry",
44
+ "Authority",
45
+ "Commission",
46
+ "Bureau",
47
+ "Polity",
48
+ "Dominion",
49
+ "Protectorate"
50
+ ]
@@ -50,6 +50,7 @@ export {
50
50
  ClusterManager,
51
51
  computeFreeCells,
52
52
  NftManager,
53
+ BalancesManager,
53
54
  ConstructionManager,
54
55
  JobsManager,
55
56
  InfluenceManager,
@@ -68,6 +69,11 @@ export type {
68
69
  PlayerRosterEntry,
69
70
  LocationStratum,
70
71
  NftConfigForItem,
72
+ WrapConfig,
73
+ WrapGate,
74
+ DepositConfig,
75
+ PlatformBalance,
76
+ TokenBalance,
71
77
  BuildableTarget,
72
78
  BuildState,
73
79
  SourceEntityRef,
@@ -87,7 +93,7 @@ export type {
87
93
  LaunchStatsInput,
88
94
  } from './managers/actions'
89
95
  export type {WrapDeposit} from './managers/nft'
90
- export {resolveLockedAmount} from './managers/nft'
96
+ export {resolveLockedAmount, wrapCostKey} from './managers/nft'
91
97
 
92
98
  export {
93
99
  getItem,
@@ -98,6 +104,7 @@ export {
98
104
  getModules,
99
105
  getEntityItems,
100
106
  resolveItemCategory,
107
+ itemTypeIndex,
101
108
  typeLabel,
102
109
  categoryLabel,
103
110
  categoryFromIndex,
@@ -1,15 +1,18 @@
1
1
  import {Checksum256, type Checksum256Type} from '@wharfkit/antelope'
2
2
  import {Coordinates, type CoordinatesType, LocationType} from '../types'
3
- import {hash512} from '../utils/hash'
3
+ import {hash512, uint16} from '../utils/hash'
4
4
  import {deriveLocationStatic, getSystemName} from '../utils/system'
5
+ import citizenryAdjectives from '../data/citizenry-adjectives.json'
6
+ import citizenryNouns from '../data/citizenry-nouns.json'
5
7
 
6
- const CITIZENRY_PATTERNS: ((world: string) => string)[] = [
7
- (w) => `${w} Collective`,
8
- (w) => `${w} Compact`,
9
- (w) => `Concord of ${w}`,
10
- (w) => `${w} Union`,
8
+ const CITIZENRY_FORMS: ((world: string, noun: string, adjective: string) => string)[] = [
9
+ (w, n) => `${w} ${n}`,
10
+ (w, n, a) => `${a} ${w} ${n}`,
11
+ (w, n, a) => `${a} ${n} of ${w}`,
11
12
  ]
12
13
 
14
+ const FORMS_WITH_ADJECTIVE = 2
15
+
13
16
  export function citizenryName(
14
17
  gameSeed: Checksum256Type,
15
18
  coordinates: CoordinatesType
@@ -22,10 +25,14 @@ export function citizenryName(
22
25
  const roll = hash512(
23
26
  Checksum256.from(gameSeed),
24
27
  `citizenry-${coords.x.toString()}-${coords.y.toString()}`
25
- ).array[0]
26
- return CITIZENRY_PATTERNS[roll % CITIZENRY_PATTERNS.length](world)
28
+ )
29
+ const form = CITIZENRY_FORMS[roll.array[0] % CITIZENRY_FORMS.length]
30
+ const noun = citizenryNouns[uint16(roll, 1) % citizenryNouns.length]
31
+ const adjective = citizenryAdjectives[uint16(roll, 3) % citizenryAdjectives.length]
32
+ return form(world, noun, adjective)
27
33
  }
28
34
 
29
35
  export function citizenryPatternCount(): number {
30
- return CITIZENRY_PATTERNS.length
36
+ const plainForms = CITIZENRY_FORMS.length - FORMS_WITH_ADJECTIVE
37
+ return citizenryNouns.length * (plainForms + FORMS_WITH_ADJECTIVE * citizenryAdjectives.length)
31
38
  }
@@ -22,7 +22,9 @@ import {findDecomp, DECOMP_REGISTRY} from './decomp'
22
22
  import {contributeDuration} from './duration'
23
23
  import {getStatCount, statsSumSq} from './quality'
24
24
  import {pricingFromWeights, valueCargoItem, valueContribution} from './valuation'
25
- import {citizenryName} from './citizenry'
25
+ import {citizenryName, citizenryPatternCount} from './citizenry'
26
+ import citizenryAdjectives from '../data/citizenry-adjectives.json'
27
+ import citizenryNouns from '../data/citizenry-nouns.json'
26
28
 
27
29
  const PAR = 213
28
30
  const WORLD = {x: 56, y: 0}
@@ -273,10 +275,34 @@ describe('citizenry names', () => {
273
275
  expect(a).toBe(b as string)
274
276
  })
275
277
 
276
- test('composes the world name', () => {
278
+ test('composes the world name with a known noun', () => {
277
279
  const name = citizenryName(gameSeed, WORLD) ?? ''
278
280
  expect(name.length).toBeGreaterThan(0)
279
- expect(/Collective|Compact|Concord of|Union/.test(name)).toBe(true)
281
+ expect(citizenryNouns.some((noun) => name.includes(noun))).toBe(true)
282
+ })
283
+
284
+ test('spreads across nouns and forms', () => {
285
+ const names: string[] = []
286
+ for (let x = 0; x < 160 && names.length < 200; x++) {
287
+ for (let y = 0; y < 160 && names.length < 200; y++) {
288
+ const name = citizenryName(gameSeed, {x, y})
289
+ if (name) names.push(name)
290
+ }
291
+ }
292
+ expect(names.length).toBeGreaterThan(100)
293
+
294
+ const nouns = new Set(names.map((n) => citizenryNouns.find((noun) => n.includes(noun))))
295
+ expect(nouns.size).toBeGreaterThan(20)
296
+
297
+ const ofForm = names.filter((n) => n.includes(' of ')).length
298
+ expect(ofForm).toBeGreaterThan(0)
299
+ expect(ofForm).toBeLessThan(names.length * 0.6)
300
+ })
301
+
302
+ test('counts every noun and adjective combination', () => {
303
+ expect(citizenryPatternCount()).toBe(
304
+ citizenryNouns.length * (1 + 2 * citizenryAdjectives.length)
305
+ )
280
306
  })
281
307
 
282
308
  test('is undefined away from a world', () => {
@@ -1,8 +1,11 @@
1
1
  import {
2
2
  Action,
3
+ Asset,
4
+ type AssetType,
3
5
  Bytes,
4
6
  Checksum256,
5
7
  type Checksum256Type,
8
+ ExtendedAsset,
6
9
  Int64,
7
10
  type Int64Type,
8
11
  Name,
@@ -18,7 +21,7 @@ import {
18
21
  } from '@wharfkit/antelope'
19
22
  import {BaseManager} from './base'
20
23
  import {Coordinates, PRECISION, type ClusterSlotType, type CoordinatesType} from '../types'
21
- import {ServerContract} from '../contracts'
24
+ import {ServerContract, TokenContract} from '../contracts'
22
25
  import {ATOMICASSETS_ABI, SHIPLOAD_COLLECTION} from '../nft/atomicassets'
23
26
  import {getItem} from '../data/catalog'
24
27
 
@@ -164,6 +167,8 @@ export type EntityRefInput = {
164
167
  export type WaypointInput = {x: Int64Type; y: Int64Type}
165
168
 
166
169
  export class ActionsManager extends BaseManager {
170
+ private tokenContracts = new Map<string, TokenContract.Contract>()
171
+
167
172
  travel(shipId: UInt64Type, destination: CoordinatesType, recharge = true): Action {
168
173
  const x = Int64.from(destination.x)
169
174
  const y = Int64.from(destination.y)
@@ -696,6 +701,88 @@ export class ActionsManager extends BaseManager {
696
701
  })
697
702
  }
698
703
 
704
+ open(owner: NameType, tokenContract: NameType, tokenSymbol: Asset.SymbolType): Action {
705
+ return this.platform.action('open', {
706
+ owner: Name.from(owner),
707
+ token_contract: Name.from(tokenContract),
708
+ token_symbol: Asset.Symbol.from(tokenSymbol),
709
+ })
710
+ }
711
+
712
+ close(owner: NameType, tokenContract: NameType, tokenSymbol: Asset.SymbolType): Action {
713
+ return this.platform.action('close', {
714
+ owner: Name.from(owner),
715
+ token_contract: Name.from(tokenContract),
716
+ token_symbol: Asset.Symbol.from(tokenSymbol),
717
+ })
718
+ }
719
+
720
+ withdraw(
721
+ owner: NameType,
722
+ quantity: AssetType,
723
+ tokenContract: NameType,
724
+ memo = 'withdraw'
725
+ ): Action {
726
+ return this.platform.action('withdraw', {
727
+ owner: Name.from(owner),
728
+ quantity: ExtendedAsset.from({
729
+ quantity: Asset.from(quantity),
730
+ contract: Name.from(tokenContract),
731
+ }),
732
+ memo,
733
+ })
734
+ }
735
+
736
+ tokenContract(account: NameType): TokenContract.Contract {
737
+ const name = Name.from(account)
738
+ const key = String(name)
739
+ let contract = this.tokenContracts.get(key)
740
+ if (!contract) {
741
+ contract = new TokenContract.Contract({client: this.client, account: name})
742
+ this.tokenContracts.set(key, contract)
743
+ }
744
+ return contract
745
+ }
746
+
747
+ tokenTransfer(
748
+ from: NameType,
749
+ to: NameType,
750
+ quantity: AssetType,
751
+ tokenContract: NameType,
752
+ memo = ''
753
+ ): Action {
754
+ return this.tokenContract(tokenContract).action('transfer', {
755
+ from: Name.from(from),
756
+ to: Name.from(to),
757
+ quantity: Asset.from(quantity),
758
+ memo,
759
+ })
760
+ }
761
+
762
+ // `open` is an idempotent no-op; omitting it is what produces the "call open first" abort.
763
+ deposit(
764
+ owner: NameType,
765
+ quantity: AssetType,
766
+ tokenContract: NameType,
767
+ opts: {memo?: string; open?: boolean} = {}
768
+ ): Action[] {
769
+ const amount = Asset.from(quantity)
770
+ const actions: Action[] = []
771
+ if (opts.open !== false) {
772
+ actions.push(this.open(owner, tokenContract, amount.symbol))
773
+ }
774
+ actions.push(
775
+ this.tokenTransfer(
776
+ owner,
777
+ this.platform.account,
778
+ amount,
779
+ tokenContract,
780
+ opts.memo ?? 'deposit'
781
+ )
782
+ )
783
+ return actions
784
+ }
785
+
699
786
  async wrap(
700
787
  owner: NameType,
701
788
  entityId: UInt64Type,
@@ -714,8 +801,8 @@ export class ActionsManager extends BaseManager {
714
801
  quantity: UInt64.from(quantity),
715
802
  }),
716
803
  ]
717
- const claimRam =
718
- opts.claimRam ?? (this.atomicAssetsAccount ?? 'atomicassets') !== 'atomicassets'
804
+ // setlastpayer is what fires logrampayer and clears the wrap gate; skipping it strands it.
805
+ const claimRam = opts.claimRam ?? true
719
806
  if (claimRam) {
720
807
  actions.push(this.setLastPayer(owner, SHIPLOAD_COLLECTION))
721
808
  }
@@ -749,8 +836,8 @@ export class ActionsManager extends BaseManager {
749
836
  nexus_id: UInt64.from(nexusId),
750
837
  }),
751
838
  ]
752
- const claimRam =
753
- opts.claimRam ?? (this.atomicAssetsAccount ?? 'atomicassets') !== 'atomicassets'
839
+ // setlastpayer is what fires logrampayer and clears the wrap gate; skipping it strands it.
840
+ const claimRam = opts.claimRam ?? true
754
841
  if (claimRam) {
755
842
  actions.push(this.setLastPayer(owner, SHIPLOAD_COLLECTION))
756
843
  }