dcaff6f4c8
* updater: refactor updater flow into state machine * updater: delay update randomly within max range * updater: configurable update delay * updater: split polling and updater state machine step * updater: drop state to avoid deadlocking * updater: fix fetch backoff * updater: fix overflow in update delay calculation * updater: configurable update check frequency * updater: fix update policy frequency comparison * updater: use lazy_static for platform and platform_id_hash * updater: refactor operations contract calls into OperationsClient * updater: make updater generic over operations and fetch client * updater: fix compilation * updater: add testing infrastructure and minimal test * updater: fix minor grumbles * updater: add test for successful updater flow * updater: add test for update delay * updater: add test for update check frequency * updater: mock time and rng for deterministic tests * updater: test backoff on failure * updater: add test for backoff short-circuit on new release * updater: refactor to increase readability * updater: cap maximum backoff to one month * updater: add test for detecting already downloaded update * updater: add test for updater disable on fatal errors * updater: add test for pending outdated fetch * updater: test auto install of updates * updater: add test for capability updates * updater: fix capability update * updater: use ethabi to create event topic filter * updater: decrease maximum backoff to 1 day * updater: cap maximum update delay with upcoming fork block number * updater: receive state mutex guard in updater_step * updater: overload execute_upgrade to take state mutex guard * updater: remove unnecessary clone of latest operations info * updater: remove latest operations info clone when triggering fetch
598 lines
8.0 KiB
JSON
598 lines
8.0 KiB
JSON
[
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_newOwner",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "resetClientOwner",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_release",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "isLatest",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_txid",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "rejectTransaction",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_newOwner",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "setOwner",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_number",
|
|
"type": "uint32"
|
|
},
|
|
{
|
|
"name": "_name",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_hard",
|
|
"type": "bool"
|
|
},
|
|
{
|
|
"name": "_spec",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "proposeFork",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "removeClient",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_release",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "release",
|
|
"outputs": [
|
|
{
|
|
"name": "o_forkBlock",
|
|
"type": "uint32"
|
|
},
|
|
{
|
|
"name": "o_track",
|
|
"type": "uint8"
|
|
},
|
|
{
|
|
"name": "o_semver",
|
|
"type": "uint24"
|
|
},
|
|
{
|
|
"name": "o_critical",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_checksum",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "build",
|
|
"outputs": [
|
|
{
|
|
"name": "o_release",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "o_platform",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [],
|
|
"name": "rejectFork",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "client",
|
|
"outputs": [
|
|
{
|
|
"name": "owner",
|
|
"type": "address"
|
|
},
|
|
{
|
|
"name": "required",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_newOwner",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "setClientOwner",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"name": "fork",
|
|
"outputs": [
|
|
{
|
|
"name": "name",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "spec",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "hard",
|
|
"type": "bool"
|
|
},
|
|
{
|
|
"name": "ratified",
|
|
"type": "bool"
|
|
},
|
|
{
|
|
"name": "requiredCount",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_release",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_platform",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_checksum",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "addChecksum",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_txid",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "confirmTransaction",
|
|
"outputs": [
|
|
{
|
|
"name": "txSuccess",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "proxy",
|
|
"outputs": [
|
|
{
|
|
"name": "requiredCount",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"name": "to",
|
|
"type": "address"
|
|
},
|
|
{
|
|
"name": "data",
|
|
"type": "bytes"
|
|
},
|
|
{
|
|
"name": "value",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"name": "gas",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_owner",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "addClient",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "clientOwner",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_txid",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_to",
|
|
"type": "address"
|
|
},
|
|
{
|
|
"name": "_data",
|
|
"type": "bytes"
|
|
},
|
|
{
|
|
"name": "_value",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"name": "_gas",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"name": "proposeTransaction",
|
|
"outputs": [
|
|
{
|
|
"name": "txSuccess",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "grandOwner",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_release",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_forkBlock",
|
|
"type": "uint32"
|
|
},
|
|
{
|
|
"name": "_track",
|
|
"type": "uint8"
|
|
},
|
|
{
|
|
"name": "_semver",
|
|
"type": "uint24"
|
|
},
|
|
{
|
|
"name": "_critical",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"name": "addRelease",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [],
|
|
"name": "acceptFork",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "clientsRequired",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_release",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "track",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "uint8"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_r",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"name": "setClientRequired",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "latestFork",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_track",
|
|
"type": "uint8"
|
|
}
|
|
],
|
|
"name": "latestInTrack",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"name": "_client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_release",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"name": "_platform",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "checksum",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "proposedFork",
|
|
"outputs": [
|
|
{
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"type": "function"
|
|
},
|
|
{
|
|
"name": "ReleaseAdded",
|
|
"type": "event",
|
|
"anonymous": false,
|
|
"inputs": [
|
|
{
|
|
"indexed": true,
|
|
"name": "client",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"indexed": true,
|
|
"name": "forkBlock",
|
|
"type": "uint32"
|
|
},
|
|
{
|
|
"indexed": false,
|
|
"name": "release",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"indexed": false,
|
|
"name": "track",
|
|
"type": "uint8"
|
|
},
|
|
{
|
|
"indexed": false,
|
|
"name": "semver",
|
|
"type": "uint24"
|
|
},
|
|
{
|
|
"indexed": true,
|
|
"name": "critical",
|
|
"type": "bool"
|
|
}
|
|
]
|
|
}
|
|
]
|