Ist von web3 zurückgegebene Strukturdaten garantiert in der richtigen Reihenfolge?

Ich habe diese Soliditätsstruktur

struct Prices {
    uint sell_price;        // wei
    uint target_price;      // primary
    uint penalty_price;     // wei
}
Prices public prices

In Trüffel, wenn ich das tue , rufe contract.prices()ich ein Array ab [sell_price, target_price, penalty_price], die Reihenfolge, in der sie in der Struktur aufgeführt sind. Ich wollte wissen, ob diese Bestellung garantiert ist?

Antworten (2)

Ja

Die von Solidity generierte Getter-Funktion verwendet die in der Struktur aufgeführte Reihenfolge. Solidität würde eine Funktion der folgenden Form erzeugen:

function prices() constant returns (uint sell_price, uint target_price, uint penalty_price) {
  sell_price = prices.sell_price;
  target_price = prices.target_price;
  penalty_price = prices.penalty_price;
}

Hier ist die ABI und sehen Sie, dass outputssie eine bestimmte Reihenfolge haben:

[
  {
    "constant": true,
    "inputs": [],
    "name": "prices",
    "outputs": [
      {
        "name": "sell_price",
        "type": "uint256"
      },
      {
        "name": "target_price",
        "type": "uint256"
      },
      {
        "name": "penalty_price",
        "type": "uint256"
      }
    ],
    "payable": false,
    "type": "function"
  }
]

Zusätzlich ein komplexeres Beispiel eines Getters von http://solidity.readthedocs.io/en/develop/contracts.html#getter-functions

contract Complex {
    struct Data {
        uint a;
        bytes3 b;
        mapping (uint => uint) map;
    }
    mapping (uint => mapping(bool => Data[])) public data;
}

Es wird eine Funktion der folgenden Form generiert:

function data(uint arg1, bool arg2, uint arg3) returns (uint a, bytes3 b) {
    a = data[arg1][arg2][arg3].a;
    b = data[arg1][arg2][arg3].b;
}

Beachten Sie, dass die Zuordnung in der Struktur weggelassen wird, da es keine gute Möglichkeit gibt, den Schlüssel für die Zuordnung bereitzustellen.

Ja.

Die ABI ist eine Sammlung von Argumenten fester Länge in einer bestimmten Reihenfolge. Die Elemente werden zuverlässig/konsistent geordnet.

Ich hoffe es hilft.