Page MenuHomePhabricator

D17517.id52183.diff
No OneTemporary

D17517.id52183.diff

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

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)

Event Timeline