@silvana-one/token 0.1.0

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 (68) hide show
  1. package/README.md +1 -0
  2. package/dist/node/BondingCurveAdmin.d.ts +690 -0
  3. package/dist/node/BondingCurveAdmin.js +504 -0
  4. package/dist/node/BondingCurveAdmin.js.map +1 -0
  5. package/dist/node/FungibleToken.d.ts +414 -0
  6. package/dist/node/FungibleToken.js +7 -0
  7. package/dist/node/FungibleToken.js.map +1 -0
  8. package/dist/node/FungibleTokenAdvancedAdmin.d.ts +124 -0
  9. package/dist/node/FungibleTokenAdvancedAdmin.js +226 -0
  10. package/dist/node/FungibleTokenAdvancedAdmin.js.map +1 -0
  11. package/dist/node/FungibleTokenContract.d.ts +526 -0
  12. package/dist/node/FungibleTokenContract.js +295 -0
  13. package/dist/node/FungibleTokenContract.js.map +1 -0
  14. package/dist/node/FungibleTokenStandardAdmin.d.ts +27 -0
  15. package/dist/node/FungibleTokenStandardAdmin.js +101 -0
  16. package/dist/node/FungibleTokenStandardAdmin.js.map +1 -0
  17. package/dist/node/bid.d.ts +86 -0
  18. package/dist/node/bid.js +168 -0
  19. package/dist/node/bid.js.map +1 -0
  20. package/dist/node/claim.d.ts +89 -0
  21. package/dist/node/claim.js +156 -0
  22. package/dist/node/claim.js.map +1 -0
  23. package/dist/node/index.cjs +1576 -0
  24. package/dist/node/index.d.ts +8 -0
  25. package/dist/node/index.js +9 -0
  26. package/dist/node/index.js.map +1 -0
  27. package/dist/node/offer.d.ts +87 -0
  28. package/dist/node/offer.js +169 -0
  29. package/dist/node/offer.js.map +1 -0
  30. package/dist/tsconfig.tsbuildinfo +1 -0
  31. package/dist/tsconfig.web.tsbuildinfo +1 -0
  32. package/dist/web/BondingCurveAdmin.d.ts +690 -0
  33. package/dist/web/BondingCurveAdmin.js +504 -0
  34. package/dist/web/BondingCurveAdmin.js.map +1 -0
  35. package/dist/web/FungibleToken.d.ts +414 -0
  36. package/dist/web/FungibleToken.js +7 -0
  37. package/dist/web/FungibleToken.js.map +1 -0
  38. package/dist/web/FungibleTokenAdvancedAdmin.d.ts +124 -0
  39. package/dist/web/FungibleTokenAdvancedAdmin.js +226 -0
  40. package/dist/web/FungibleTokenAdvancedAdmin.js.map +1 -0
  41. package/dist/web/FungibleTokenContract.d.ts +526 -0
  42. package/dist/web/FungibleTokenContract.js +295 -0
  43. package/dist/web/FungibleTokenContract.js.map +1 -0
  44. package/dist/web/FungibleTokenStandardAdmin.d.ts +27 -0
  45. package/dist/web/FungibleTokenStandardAdmin.js +101 -0
  46. package/dist/web/FungibleTokenStandardAdmin.js.map +1 -0
  47. package/dist/web/bid.d.ts +86 -0
  48. package/dist/web/bid.js +168 -0
  49. package/dist/web/bid.js.map +1 -0
  50. package/dist/web/claim.d.ts +89 -0
  51. package/dist/web/claim.js +156 -0
  52. package/dist/web/claim.js.map +1 -0
  53. package/dist/web/index.d.ts +8 -0
  54. package/dist/web/index.js +9 -0
  55. package/dist/web/index.js.map +1 -0
  56. package/dist/web/offer.d.ts +87 -0
  57. package/dist/web/offer.js +169 -0
  58. package/dist/web/offer.js.map +1 -0
  59. package/package.json +64 -0
  60. package/src/BondingCurveAdmin.ts +590 -0
  61. package/src/FungibleToken.ts +11 -0
  62. package/src/FungibleTokenAdvancedAdmin.ts +260 -0
  63. package/src/FungibleTokenContract.ts +337 -0
  64. package/src/FungibleTokenStandardAdmin.ts +95 -0
  65. package/src/bid.ts +170 -0
  66. package/src/claim.ts +151 -0
  67. package/src/index.ts +8 -0
  68. package/src/offer.ts +164 -0
@@ -0,0 +1,168 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { AccountUpdate, method, Permissions, PublicKey, State, state, UInt64, SmartContract, Bool, Field, Struct, } from "o1js";
3
+ import { Whitelist } from "@silvana-one/storage";
4
+ import { FungibleToken } from "./FungibleToken.js";
5
+ export class BidEvent extends Struct({
6
+ amount: UInt64,
7
+ address: PublicKey,
8
+ }) {
9
+ }
10
+ export class FungibleTokenBidContract extends SmartContract {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.price = State();
14
+ this.buyer = State();
15
+ this.token = State();
16
+ this.whitelist = State();
17
+ this.events = {
18
+ bid: BidEvent,
19
+ withdraw: BidEvent,
20
+ sell: BidEvent,
21
+ updateWhitelist: Whitelist,
22
+ };
23
+ }
24
+ async deploy(args) {
25
+ await super.deploy(args);
26
+ this.whitelist.set(args.whitelist);
27
+ this.account.permissions.set({
28
+ ...Permissions.default(),
29
+ send: Permissions.proof(),
30
+ setVerificationKey: Permissions.VerificationKey.impossibleDuringCurrentVersion(),
31
+ setPermissions: Permissions.impossible(),
32
+ });
33
+ }
34
+ async initialize(token, amount, price) {
35
+ this.account.provedState.requireEquals(Bool(false));
36
+ amount.equals(UInt64.from(0)).assertFalse();
37
+ const totalPriceField = price.value
38
+ .mul(amount.value)
39
+ .div(Field(1_000_000_000));
40
+ totalPriceField.assertLessThan(UInt64.MAXINT().value, "totalPrice overflow");
41
+ const totalPrice = UInt64.Unsafe.fromField(totalPriceField);
42
+ const buyer = this.sender.getUnconstrained();
43
+ const buyerUpdate = AccountUpdate.createSigned(buyer);
44
+ buyerUpdate.send({ to: this.address, amount: totalPrice });
45
+ buyerUpdate.body.useFullCommitment = Bool(true);
46
+ this.buyer.set(buyer);
47
+ this.price.set(price);
48
+ this.token.set(token);
49
+ this.emitEvent("bid", { amount, address: buyer });
50
+ }
51
+ async bid(amount, price) {
52
+ amount.equals(UInt64.from(0)).assertFalse();
53
+ const balance = this.account.balance.getAndRequireEquals();
54
+ const oldPrice = this.price.getAndRequireEquals();
55
+ // Price can be changed only when the balance is 0
56
+ price
57
+ .equals(oldPrice)
58
+ .or(balance.equals(UInt64.from(0)))
59
+ .assertTrue();
60
+ this.price.set(price);
61
+ const totalPriceField = price.value
62
+ .mul(amount.value)
63
+ .div(Field(1_000_000_000));
64
+ totalPriceField.assertLessThan(UInt64.MAXINT().value, "totalPrice overflow");
65
+ const totalPrice = UInt64.Unsafe.fromField(totalPriceField);
66
+ const sender = this.sender.getUnconstrained();
67
+ const buyer = this.buyer.getAndRequireEquals();
68
+ sender.assertEquals(buyer);
69
+ const buyerUpdate = AccountUpdate.createSigned(buyer);
70
+ buyerUpdate.send({ to: this.address, amount: totalPrice });
71
+ buyerUpdate.body.useFullCommitment = Bool(true);
72
+ this.price.set(price);
73
+ this.emitEvent("bid", { amount, address: buyer });
74
+ }
75
+ async withdraw(amountInMina) {
76
+ amountInMina.equals(UInt64.from(0)).assertFalse();
77
+ this.account.balance.requireBetween(amountInMina, UInt64.MAXINT());
78
+ const buyer = this.buyer.getAndRequireEquals();
79
+ const sender = this.sender.getUnconstrained();
80
+ const senderUpdate = AccountUpdate.createSigned(sender);
81
+ senderUpdate.body.useFullCommitment = Bool(true);
82
+ sender.assertEquals(buyer);
83
+ let bidUpdate = this.send({ to: senderUpdate, amount: amountInMina });
84
+ bidUpdate.body.useFullCommitment = Bool(true);
85
+ this.emitEvent("withdraw", {
86
+ amount: amountInMina,
87
+ address: buyer,
88
+ });
89
+ }
90
+ async sell(amount) {
91
+ amount.equals(UInt64.from(0)).assertFalse();
92
+ const price = this.price.getAndRequireEquals();
93
+ const totalPriceField = price.value
94
+ .mul(amount.value)
95
+ .div(Field(1_000_000_000));
96
+ totalPriceField.assertLessThan(UInt64.MAXINT().value, "totalPrice overflow");
97
+ const totalPrice = UInt64.Unsafe.fromField(totalPriceField);
98
+ this.account.balance.requireBetween(totalPrice, UInt64.MAXINT());
99
+ const buyer = this.buyer.getAndRequireEquals();
100
+ const token = this.token.getAndRequireEquals();
101
+ const seller = this.sender.getUnconstrained();
102
+ const sellerUpdate = this.send({ to: seller, amount: totalPrice });
103
+ sellerUpdate.body.useFullCommitment = Bool(true);
104
+ sellerUpdate.requireSignature();
105
+ const tokenContract = new FungibleToken(token);
106
+ await tokenContract.transfer(seller, buyer, amount);
107
+ const whitelist = this.whitelist.getAndRequireEquals();
108
+ const whitelistedAmount = await whitelist.getWhitelistedAmount(seller);
109
+ amount.assertLessThanOrEqual(whitelistedAmount.assertSome("Cannot sell more than whitelisted amount"));
110
+ this.emitEvent("sell", { amount, address: seller });
111
+ }
112
+ async updateWhitelist(whitelist) {
113
+ const buyer = this.buyer.getAndRequireEquals();
114
+ const sender = this.sender.getUnconstrained();
115
+ const senderUpdate = AccountUpdate.createSigned(sender);
116
+ senderUpdate.body.useFullCommitment = Bool(true);
117
+ sender.assertEquals(buyer);
118
+ this.whitelist.set(whitelist);
119
+ this.emitEvent("updateWhitelist", whitelist);
120
+ }
121
+ }
122
+ __decorate([
123
+ state(UInt64),
124
+ __metadata("design:type", Object)
125
+ ], FungibleTokenBidContract.prototype, "price", void 0);
126
+ __decorate([
127
+ state(PublicKey),
128
+ __metadata("design:type", Object)
129
+ ], FungibleTokenBidContract.prototype, "buyer", void 0);
130
+ __decorate([
131
+ state(PublicKey),
132
+ __metadata("design:type", Object)
133
+ ], FungibleTokenBidContract.prototype, "token", void 0);
134
+ __decorate([
135
+ state(Whitelist),
136
+ __metadata("design:type", Object)
137
+ ], FungibleTokenBidContract.prototype, "whitelist", void 0);
138
+ __decorate([
139
+ method,
140
+ __metadata("design:type", Function),
141
+ __metadata("design:paramtypes", [PublicKey, UInt64, UInt64]),
142
+ __metadata("design:returntype", Promise)
143
+ ], FungibleTokenBidContract.prototype, "initialize", null);
144
+ __decorate([
145
+ method,
146
+ __metadata("design:type", Function),
147
+ __metadata("design:paramtypes", [UInt64, UInt64]),
148
+ __metadata("design:returntype", Promise)
149
+ ], FungibleTokenBidContract.prototype, "bid", null);
150
+ __decorate([
151
+ method,
152
+ __metadata("design:type", Function),
153
+ __metadata("design:paramtypes", [UInt64]),
154
+ __metadata("design:returntype", Promise)
155
+ ], FungibleTokenBidContract.prototype, "withdraw", null);
156
+ __decorate([
157
+ method,
158
+ __metadata("design:type", Function),
159
+ __metadata("design:paramtypes", [UInt64]),
160
+ __metadata("design:returntype", Promise)
161
+ ], FungibleTokenBidContract.prototype, "sell", null);
162
+ __decorate([
163
+ method,
164
+ __metadata("design:type", Function),
165
+ __metadata("design:paramtypes", [Whitelist]),
166
+ __metadata("design:returntype", Promise)
167
+ ], FungibleTokenBidContract.prototype, "updateWhitelist", null);
168
+ //# sourceMappingURL=bid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bid.js","sourceRoot":"","sources":["../../src/bid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { DeployArgs, PublicKey, State, UInt64, SmartContract, Bool, Field } from "o1js";
2
+ import { Whitelist } from "@silvana-one/storage";
3
+ declare const ClaimEvent_base: (new (value: {
4
+ amount: UInt64;
5
+ address: PublicKey;
6
+ }) => {
7
+ amount: UInt64;
8
+ address: PublicKey;
9
+ }) & {
10
+ _isStruct: true;
11
+ } & Omit<import("node_modules/o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
12
+ amount: UInt64;
13
+ address: PublicKey;
14
+ }, {
15
+ amount: bigint;
16
+ address: {
17
+ x: bigint;
18
+ isOdd: boolean;
19
+ };
20
+ }>, "fromFields"> & {
21
+ fromFields: (fields: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[]) => {
22
+ amount: UInt64;
23
+ address: PublicKey;
24
+ };
25
+ } & {
26
+ fromValue: (value: {
27
+ amount: bigint | UInt64;
28
+ address: PublicKey | {
29
+ x: Field | bigint;
30
+ isOdd: Bool | boolean;
31
+ };
32
+ }) => {
33
+ amount: UInt64;
34
+ address: PublicKey;
35
+ };
36
+ toInput: (x: {
37
+ amount: UInt64;
38
+ address: PublicKey;
39
+ }) => {
40
+ fields?: Field[] | undefined;
41
+ packed?: [Field, number][] | undefined;
42
+ };
43
+ toJSON: (x: {
44
+ amount: UInt64;
45
+ address: PublicKey;
46
+ }) => {
47
+ amount: string;
48
+ address: string;
49
+ };
50
+ fromJSON: (x: {
51
+ amount: string;
52
+ address: string;
53
+ }) => {
54
+ amount: UInt64;
55
+ address: PublicKey;
56
+ };
57
+ empty: () => {
58
+ amount: UInt64;
59
+ address: PublicKey;
60
+ };
61
+ };
62
+ declare class ClaimEvent extends ClaimEvent_base {
63
+ }
64
+ export interface FungibleTokenClaimContractDeployProps extends Exclude<DeployArgs, undefined> {
65
+ /** The whitelist. */
66
+ whitelist: Whitelist;
67
+ /** The maximum amount of tokens to claim in case the whitelist is empty. */
68
+ maxAmount?: UInt64;
69
+ }
70
+ export declare class FungibleTokenClaimContract extends SmartContract {
71
+ owner: State<PublicKey>;
72
+ token: State<PublicKey>;
73
+ whitelist: State<Whitelist>;
74
+ maxAmount: State<UInt64>;
75
+ deploy(args: FungibleTokenClaimContractDeployProps): Promise<void>;
76
+ events: {
77
+ offer: typeof ClaimEvent;
78
+ withdraw: typeof ClaimEvent;
79
+ claim: typeof ClaimEvent;
80
+ updateWhitelist: typeof Whitelist;
81
+ };
82
+ initialize(owner: PublicKey, // we are short of AccountUpdates here, so we use this parameter instead of this.sender.getUnconstrained()
83
+ token: PublicKey, amount: UInt64): Promise<void>;
84
+ offer(amount: UInt64): Promise<void>;
85
+ withdraw(amount: UInt64): Promise<void>;
86
+ claim(amount: UInt64): Promise<void>;
87
+ updateWhitelist(whitelist: Whitelist): Promise<void>;
88
+ }
89
+ export {};
@@ -0,0 +1,156 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { AccountUpdate, method, Permissions, PublicKey, State, state, UInt64, SmartContract, Bool, Struct, Provable, } from "o1js";
3
+ import { Whitelist } from "@silvana-one/storage";
4
+ import { FungibleToken } from "./FungibleToken.js";
5
+ class ClaimEvent extends Struct({
6
+ amount: UInt64,
7
+ address: PublicKey,
8
+ }) {
9
+ }
10
+ export class FungibleTokenClaimContract extends SmartContract {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.owner = State();
14
+ this.token = State();
15
+ this.whitelist = State();
16
+ this.maxAmount = State();
17
+ this.events = {
18
+ offer: ClaimEvent,
19
+ withdraw: ClaimEvent,
20
+ claim: ClaimEvent,
21
+ updateWhitelist: Whitelist,
22
+ };
23
+ }
24
+ async deploy(args) {
25
+ await super.deploy(args);
26
+ this.whitelist.set(args.whitelist);
27
+ this.maxAmount.set(args.maxAmount ?? UInt64.MAXINT());
28
+ this.account.permissions.set({
29
+ ...Permissions.default(),
30
+ send: Permissions.proof(),
31
+ setVerificationKey: Permissions.VerificationKey.impossibleDuringCurrentVersion(),
32
+ setPermissions: Permissions.impossible(),
33
+ });
34
+ }
35
+ async initialize(owner, // we are short of AccountUpdates here, so we use this parameter instead of this.sender.getUnconstrained()
36
+ token, amount) {
37
+ this.account.provedState.requireEquals(Bool(false));
38
+ const tokenContract = new FungibleToken(token);
39
+ const tokenId = tokenContract.deriveTokenId();
40
+ tokenId.assertEquals(this.tokenId);
41
+ await tokenContract.transfer(owner, this.address, amount);
42
+ this.owner.set(owner);
43
+ this.token.set(token);
44
+ this.emitEvent("offer", { amount, address: owner });
45
+ }
46
+ async offer(amount) {
47
+ const owner = this.owner.getAndRequireEquals();
48
+ const token = this.token.getAndRequireEquals();
49
+ const tokenContract = new FungibleToken(token);
50
+ const tokenId = tokenContract.deriveTokenId();
51
+ tokenId.assertEquals(this.tokenId);
52
+ const sender = this.sender.getUnconstrained();
53
+ const senderUpdate = AccountUpdate.createSigned(sender);
54
+ senderUpdate.body.useFullCommitment = Bool(true);
55
+ sender.assertEquals(owner);
56
+ await tokenContract.transfer(sender, this.address, amount);
57
+ this.emitEvent("offer", { amount, address: sender });
58
+ }
59
+ async withdraw(amount) {
60
+ amount.equals(UInt64.from(0)).assertFalse();
61
+ this.account.balance.requireBetween(amount, UInt64.MAXINT());
62
+ const owner = this.owner.getAndRequireEquals();
63
+ const token = this.token.getAndRequireEquals();
64
+ const tokenContract = new FungibleToken(token);
65
+ const tokenId = tokenContract.deriveTokenId();
66
+ tokenId.assertEquals(this.tokenId);
67
+ const sender = this.sender.getUnconstrained();
68
+ const senderUpdate = AccountUpdate.createSigned(sender, tokenId);
69
+ senderUpdate.body.useFullCommitment = Bool(true);
70
+ sender.assertEquals(owner);
71
+ let offerUpdate = this.send({ to: senderUpdate, amount });
72
+ offerUpdate.body.mayUseToken = AccountUpdate.MayUseToken.InheritFromParent;
73
+ offerUpdate.body.useFullCommitment = Bool(true);
74
+ this.emitEvent("withdraw", { amount, address: sender });
75
+ }
76
+ async claim(amount) {
77
+ const maxAmount = this.maxAmount.getAndRequireEquals();
78
+ const token = this.token.getAndRequireEquals();
79
+ const tokenContract = new FungibleToken(token);
80
+ const tokenId = tokenContract.deriveTokenId();
81
+ tokenId.assertEquals(this.tokenId);
82
+ const sender = this.sender.getUnconstrained();
83
+ const senderUpdate = AccountUpdate.createSigned(sender, tokenId);
84
+ senderUpdate.body.useFullCommitment = Bool(true);
85
+ const whitelist = this.whitelist.getAndRequireEquals();
86
+ const whiteListedAmount = await whitelist.getWhitelistedAmount(sender);
87
+ const maxClaimAmount = Provable.if(whitelist.isSome(), whiteListedAmount.assertSome("No tokens to claim"), maxAmount);
88
+ amount.assertLessThanOrEqual(maxClaimAmount);
89
+ this.account.balance.requireBetween(amount, UInt64.MAXINT());
90
+ let offerUpdate = this.send({ to: senderUpdate, amount });
91
+ offerUpdate.body.mayUseToken = AccountUpdate.MayUseToken.InheritFromParent;
92
+ offerUpdate.body.useFullCommitment = Bool(true);
93
+ this.emitEvent("claim", {
94
+ amount,
95
+ address: sender,
96
+ });
97
+ }
98
+ async updateWhitelist(whitelist) {
99
+ const owner = this.owner.getAndRequireEquals();
100
+ const sender = this.sender.getUnconstrained();
101
+ const senderUpdate = AccountUpdate.createSigned(sender);
102
+ senderUpdate.body.useFullCommitment = Bool(true);
103
+ sender.assertEquals(owner);
104
+ this.whitelist.set(whitelist);
105
+ this.emitEvent("updateWhitelist", whitelist);
106
+ }
107
+ }
108
+ __decorate([
109
+ state(PublicKey),
110
+ __metadata("design:type", Object)
111
+ ], FungibleTokenClaimContract.prototype, "owner", void 0);
112
+ __decorate([
113
+ state(PublicKey),
114
+ __metadata("design:type", Object)
115
+ ], FungibleTokenClaimContract.prototype, "token", void 0);
116
+ __decorate([
117
+ state(Whitelist),
118
+ __metadata("design:type", Object)
119
+ ], FungibleTokenClaimContract.prototype, "whitelist", void 0);
120
+ __decorate([
121
+ state(UInt64),
122
+ __metadata("design:type", Object)
123
+ ], FungibleTokenClaimContract.prototype, "maxAmount", void 0);
124
+ __decorate([
125
+ method,
126
+ __metadata("design:type", Function),
127
+ __metadata("design:paramtypes", [PublicKey,
128
+ PublicKey,
129
+ UInt64]),
130
+ __metadata("design:returntype", Promise)
131
+ ], FungibleTokenClaimContract.prototype, "initialize", null);
132
+ __decorate([
133
+ method,
134
+ __metadata("design:type", Function),
135
+ __metadata("design:paramtypes", [UInt64]),
136
+ __metadata("design:returntype", Promise)
137
+ ], FungibleTokenClaimContract.prototype, "offer", null);
138
+ __decorate([
139
+ method,
140
+ __metadata("design:type", Function),
141
+ __metadata("design:paramtypes", [UInt64]),
142
+ __metadata("design:returntype", Promise)
143
+ ], FungibleTokenClaimContract.prototype, "withdraw", null);
144
+ __decorate([
145
+ method,
146
+ __metadata("design:type", Function),
147
+ __metadata("design:paramtypes", [UInt64]),
148
+ __metadata("design:returntype", Promise)
149
+ ], FungibleTokenClaimContract.prototype, "claim", null);
150
+ __decorate([
151
+ method,
152
+ __metadata("design:type", Function),
153
+ __metadata("design:paramtypes", [Whitelist]),
154
+ __metadata("design:returntype", Promise)
155
+ ], FungibleTokenClaimContract.prototype, "updateWhitelist", null);
156
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/claim.ts"],"names":[],"mappings":"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"}