Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F12945029
D17517.id52183.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
D17517.id52183.diff
View Options
diff --git a/modules/ecash-agora/README.md b/modules/ecash-agora/README.md
--- a/modules/ecash-agora/README.md
+++ b/modules/ecash-agora/README.md
@@ -166,3 +166,7 @@
### 0.3.0
- Add `TakenInfo` in `historicOffers` method to support parsing historic Agora offers [D17422](https://reviews.bitcoinabc.org/D17422)
+
+### 0.3.1
+
+- Do not allow creation of unacceptable agora partials [D17517](https://reviews.bitcoinabc.org/D17517)
diff --git a/modules/ecash-agora/src/partial.approx.test.ts b/modules/ecash-agora/src/partial.approx.test.ts
--- a/modules/ecash-agora/src/partial.approx.test.ts
+++ b/modules/ecash-agora/src/partial.approx.test.ts
@@ -26,51 +26,51 @@
dustAmount: DEFAULT_DUST_LIMIT,
};
- it('AgoraPartial.approximateParams 1 for 1sat/token', () => {
+ it('AgoraPartial.approximateParams 546 for 1sat/token', () => {
const params = AgoraPartial.approximateParams({
- offeredTokens: 1n,
+ offeredTokens: 546n,
priceNanoSatsPerToken: 1000000000n,
minAcceptedTokens: 546n,
...BASE_PARAMS_SLP,
});
expect(params).to.deep.equal(
new AgoraPartial({
- truncTokens: 1n,
+ truncTokens: 546n,
numTokenTruncBytes: 0,
- tokenScaleFactor: 0x40000001n,
- scaledTruncTokensPerTruncSat: 0x40000001n,
+ tokenScaleFactor: 3925916n,
+ scaledTruncTokensPerTruncSat: 3925916n,
numSatsTruncBytes: 0,
- minAcceptedScaledTruncTokens: 586263036450n,
+ minAcceptedScaledTruncTokens: 2143550136n,
...BASE_PARAMS_SLP,
scriptLen: params.scriptLen,
}),
);
- expect(params.offeredTokens()).to.equal(1n);
+ expect(params.offeredTokens()).to.equal(546n);
expect(params.minAcceptedTokens()).to.equal(546n);
expect(params.askedSats(1n)).to.equal(1n);
expect(params.priceNanoSatsPerToken(1n)).to.equal(1000000000n);
});
- it('AgoraPartial.approximateParams 2 for 1sat/token', () => {
+ it('AgoraPartial.approximateParams 1092 for 1sat/token', () => {
const params = AgoraPartial.approximateParams({
- offeredTokens: 2n,
+ offeredTokens: 1092n,
priceNanoSatsPerToken: 1000000000n,
minAcceptedTokens: 546n,
...BASE_PARAMS_SLP,
});
expect(params).to.deep.equal(
new AgoraPartial({
- truncTokens: 2n,
+ truncTokens: 1092n,
numTokenTruncBytes: 0,
- tokenScaleFactor: 0x20000000n,
- scaledTruncTokensPerTruncSat: 0x20000000n,
+ tokenScaleFactor: 1964759n,
+ scaledTruncTokensPerTruncSat: 1964759n,
numSatsTruncBytes: 0,
- minAcceptedScaledTruncTokens: 293131517952n,
+ minAcceptedScaledTruncTokens: 1072758414n,
...BASE_PARAMS_SLP,
scriptLen: params.scriptLen,
}),
);
- expect(params.offeredTokens()).to.equal(2n);
+ expect(params.offeredTokens()).to.equal(1092n);
expect(params.minAcceptedTokens()).to.equal(546n);
expect(params.askedSats(1n)).to.equal(1n);
expect(params.askedSats(2n)).to.equal(2n);
@@ -1122,6 +1122,15 @@
tokenProtocol: 'ALP',
}),
).to.throw('For ALP, offeredTokens can be at most 0xffffffffffff');
+ expect(() =>
+ AgoraPartial.approximateParams({
+ offeredTokens: 100n,
+ priceNanoSatsPerToken: 10000000000n,
+ minAcceptedTokens: 101n,
+ ...BASE_PARAMS_SLP,
+ tokenProtocol: 'ALP',
+ }),
+ ).to.throw('offeredTokens must be greater than minAcceptedTokens');
expect(() =>
AgoraPartial.approximateParams({
offeredTokens: 1n,
@@ -1140,7 +1149,7 @@
).to.throw('minAcceptedTokens too small, got truncated to 0');
expect(() =>
AgoraPartial.approximateParams({
- offeredTokens: 1n,
+ offeredTokens: 545n,
priceNanoSatsPerToken: 1000000000n,
minAcceptedTokens: 545n,
...BASE_PARAMS_SLP,
diff --git a/modules/ecash-agora/src/partial.ts b/modules/ecash-agora/src/partial.ts
--- a/modules/ecash-agora/src/partial.ts
+++ b/modules/ecash-agora/src/partial.ts
@@ -341,6 +341,12 @@
);
}
+ if (params.offeredTokens < params.minAcceptedTokens) {
+ throw new Error(
+ 'offeredTokens must be greater than minAcceptedTokens',
+ );
+ }
+
// Script uses 1 bit as sign bit, which we can't use in our calculation
const scriptIntegerWithoutSignBits = scriptIntegerBits - 1n;
// Max integer that can be represented in Script on the network
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 6, 17:16 (21 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5082762
Default Alt Text
D17517.id52183.diff (4 KB)
Attached To
D17517: [ecash-agora] Do not allow creation of unacceptable agora partials
Event Timeline
Log In to Comment