Kaynağa Gözat

Bring PythStructs.PriceAttestation struct in line with new API

Tom Pointon 3 yıl önce
ebeveyn
işleme
261c2d796c

+ 12 - 12
ethereum/contracts/pyth/Pyth.sol

@@ -43,17 +43,17 @@ contract Pyth is PythGovernance {
     function parsePriceAttestation(bytes memory encodedPriceAttestation) public pure returns (PythStructs.PriceAttestation memory pa) {
         uint index = 0;
 
-        pa.magic = encodedPriceAttestation.toUint32(index);
+        pa.header.magic = encodedPriceAttestation.toUint32(index);
         index += 4;
-        require(pa.magic == 0x50325748, "invalid protocol");
+        require(pa.header.magic == 0x50325748, "invalid protocol");
 
-        pa.version = encodedPriceAttestation.toUint16(index);
+        pa.header.version = encodedPriceAttestation.toUint16(index);
         index += 2;
-        require(pa.version == 1, "invalid protocol");
+        require(pa.header.version == 1, "invalid protocol");
 
-        pa.payloadId = encodedPriceAttestation.toUint8(index);
+        pa.header.payloadId = encodedPriceAttestation.toUint8(index);
         index += 1;
-        require(pa.payloadId == 1, "invalid PriceAttestation");
+        require(pa.header.payloadId == 1, "invalid PriceAttestation");
 
         pa.productId = encodedPriceAttestation.toBytes32(index);
         index += 32;
@@ -68,18 +68,18 @@ contract Pyth is PythGovernance {
         pa.exponent = int32(encodedPriceAttestation.toUint32(index));
         index += 4;
 
-        pa.twap.value = int64(encodedPriceAttestation.toUint64(index));
+        pa.emaPrice.value = int64(encodedPriceAttestation.toUint64(index));
         index += 8;
-        pa.twap.numerator = int64(encodedPriceAttestation.toUint64(index));
+        pa.emaPrice.numerator = int64(encodedPriceAttestation.toUint64(index));
         index += 8;
-        pa.twap.denominator = int64(encodedPriceAttestation.toUint64(index));
+        pa.emaPrice.denominator = int64(encodedPriceAttestation.toUint64(index));
         index += 8;
 
-        pa.twac.value = int64(encodedPriceAttestation.toUint64(index));
+        pa.emaConf.value = int64(encodedPriceAttestation.toUint64(index));
         index += 8;
-        pa.twac.numerator = int64(encodedPriceAttestation.toUint64(index));
+        pa.emaConf.numerator = int64(encodedPriceAttestation.toUint64(index));
         index += 8;
-        pa.twac.denominator = int64(encodedPriceAttestation.toUint64(index));
+        pa.emaConf.denominator = int64(encodedPriceAttestation.toUint64(index));
         index += 8;
 
         pa.confidenceInterval = encodedPriceAttestation.toUint64(index);

+ 14 - 13
ethereum/contracts/pyth/PythStructs.sol

@@ -8,29 +8,24 @@ import "../libraries/external/BytesLib.sol";
 contract PythStructs {
     using BytesLib for bytes;
 
-    struct Ema {
-        int64 value;
-        int64 numerator;
-        int64 denominator;
+    struct Header {
+        uint32 magic;
+        uint16 version;
+        uint8 payloadId;
     }
 
     struct PriceAttestation {
-        uint32 magic; // constant "P2WH"
-        uint16 version;
-
-        // PayloadID uint8 = 1
-        uint8 payloadId;
+        Header header;
 
         bytes32 productId;
         bytes32 priceId;
-
         uint8 priceType;
 
         int64 price;
         int32 exponent;
 
-        Ema twap;
-        Ema twac;
+        Rational emaPrice;
+        Rational emaConf;
 
         uint64 confidenceInterval;
 
@@ -40,6 +35,12 @@ contract PythStructs {
         uint64 timestamp;
     }
 
+    struct Rational {
+        int64 value;
+        int64 numerator;
+        int64 denominator;
+    }
+
     struct UpgradeContract {
         bytes32 module;
         uint8 action;
@@ -47,4 +48,4 @@ contract PythStructs {
 
         address newContract;
     }
-}
+}

+ 18 - 18
ethereum/test/pyth.js

@@ -99,22 +99,22 @@ contract("Pyth", function () {
 
         let parsed = await initialized.methods.parsePriceAttestation(testUpdate).call();
 
-        assert.equal(parsed.magic, 1345476424);
-        assert.equal(parsed.version, 1);
-        assert.equal(parsed.payloadId, 1);
+        assert.equal(parsed.header.magic, 1345476424);
+        assert.equal(parsed.header.version, 1);
+        assert.equal(parsed.header.payloadId, 1);
         assert.equal(parsed.productId, "0x1515151515151515151515151515151515151515151515151515151515151515");
         assert.equal(parsed.priceId, "0xdededededededededededededededededededededededededededededededede");
         assert.equal(parsed.priceType, 1);
         assert.equal(parsed.price, -2401053088876217666);
         assert.equal(parsed.exponent, -3);
 
-        assert.equal(parsed.twap.value, -42);
-        assert.equal(parsed.twap.numerator, 15);
-        assert.equal(parsed.twap.denominator, 37);
+        assert.equal(parsed.emaPrice.value, -42);
+        assert.equal(parsed.emaPrice.numerator, 15);
+        assert.equal(parsed.emaPrice.denominator, 37);
 
-        assert.equal(parsed.twac.value, 42);
-        assert.equal(parsed.twac.numerator, 1111);
-        assert.equal(parsed.twac.denominator, 2222);
+        assert.equal(parsed.emaConf.value, 42);
+        assert.equal(parsed.emaConf.numerator, 1111);
+        assert.equal(parsed.emaConf.denominator, 2222);
 
         assert.equal(parsed.confidenceInterval, 101);
 
@@ -154,22 +154,22 @@ contract("Pyth", function () {
 
         let cached = await initialized.methods.latestAttestation("0x1515151515151515151515151515151515151515151515151515151515151515", 1).call();
 
-        assert.equal(cached.magic, 1345476424);
-        assert.equal(cached.version, 1);
-        assert.equal(cached.payloadId, 1);
+        assert.equal(cached.header.magic, 1345476424);
+        assert.equal(cached.header.version, 1);
+        assert.equal(cached.header.payloadId, 1);
         assert.equal(cached.productId, "0x1515151515151515151515151515151515151515151515151515151515151515");
         assert.equal(cached.priceId, "0xdededededededededededededededededededededededededededededededede");
         assert.equal(cached.priceType, 1);
         assert.equal(cached.price, -2401053088876217666);
         assert.equal(cached.exponent, -3);
 
-        assert.equal(cached.twap.value, -42);
-        assert.equal(cached.twap.numerator, 15);
-        assert.equal(cached.twap.denominator, 37);
+        assert.equal(cached.emaPrice.value, -42);
+        assert.equal(cached.emaPrice.numerator, 15);
+        assert.equal(cached.emaPrice.denominator, 37);
 
-        assert.equal(cached.twac.value, 42);
-        assert.equal(cached.twac.numerator, 1111);
-        assert.equal(cached.twac.denominator, 2222);
+        assert.equal(cached.emaConf.value, 42);
+        assert.equal(cached.emaConf.numerator, 1111);
+        assert.equal(cached.emaConf.denominator, 2222);
 
         assert.equal(cached.confidenceInterval, 101);