Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
ae76eaa4
Commit
ae76eaa4
authored
Sep 25, 2021
by
George Hotz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
minor contract tweaks
parent
3f1c9761
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
8 deletions
+17
-8
Challenge.sol
contracts/Challenge.sol
+14
-6
MIPS.sol
contracts/MIPS.sol
+3
-2
No files found.
contracts/Challenge.sol
View file @
ae76eaa4
...
...
@@ -11,7 +11,11 @@ interface IMIPS {
contract Challenge {
address payable immutable owner;
// the mips machine state transition function
IMIPS immutable mips;
// the program start state
bytes32 immutable GlobalStartState;
struct Chal {
...
...
@@ -29,7 +33,7 @@ contract Challenge {
GlobalStartState = globalStartState;
}
// allow getting money
// allow getting money
(and withdrawing the bounty, honor system)
fallback() external payable {}
receive() external payable {}
function withdraw() external {
...
...
@@ -58,7 +62,7 @@ contract Challenge {
}
// create challenge
uint256 lastChallengeId = 0;
uint256
public
lastChallengeId = 0;
function newChallengeTrusted(bytes32 startState, bytes32 finalSystemState, uint256 stepCount) internal returns (uint256) {
uint256 challengeId = lastChallengeId;
...
...
@@ -108,6 +112,7 @@ contract Challenge {
startState = writeBytes32(startState, 0xD0000060, uncles);
// confirm the finalSystemHash asserts the state you claim (in $t0-$t7) and the machine is stopped
// you must load these proofs into MIPS before calling this
// we disagree at the end
require(readBytes32(finalSystemState, 0xC0000020) == assertionRoot, "you are claiming a different state in machine");
require(mips.ReadMemory(finalSystemState, 0xC0000080) == 0xDEAD0000, "machine is not stopped in final state (PC == 0xDEAD0000)");
...
...
@@ -119,11 +124,13 @@ contract Challenge {
function getStepNumber(uint256 challengeId) view public returns (uint256) {
Chal storage c = challenges[challengeId];
require(c.challenger != address(0), "invalid challenge");
return (c.L+c.R)/2;
}
function ProposeState(uint256 challengeId, bytes32 riscState) external {
Chal storage c = challenges[challengeId];
require(c.challenger != address(0), "invalid challenge");
require(c.challenger == msg.sender, "must be challenger");
uint256 stepNumber = getStepNumber(challengeId);
...
...
@@ -133,7 +140,8 @@ contract Challenge {
function RespondState(uint256 challengeId, bytes32 riscState) external {
Chal storage c = challenges[challengeId];
require(msg.sender == owner, "must be owner");
require(c.challenger != address(0), "invalid challenge");
require(owner == msg.sender, "must be owner");
uint256 stepNumber = getStepNumber(challengeId);
require(c.assertedState[stepNumber] != bytes32(0), "challenger state not proposed");
...
...
@@ -154,13 +162,13 @@ contract Challenge {
function ConfirmStateTransition(uint256 challengeId) external {
Chal storage c = challenges[challengeId];
require(c.challenger != address(0), "invalid challenge");
require(c.challenger == msg.sender, "must be challenger");
require(c.L + 1 == c.R, "binary search not finished");
bytes32 newState = mips.Step(c.assertedState[c.L]);
require(newState == c.assertedState[c.R], "wrong asserted state");
require(mips.Step(c.assertedState[c.L]) == c.assertedState[c.R], "wrong asserted state");
// pay out bounty!!
msg.send
er.transfer(address(this).balance);
c.challeng
er.transfer(address(this).balance);
}
}
contracts/MIPS.sol
View file @
ae76eaa4
...
...
@@ -29,6 +29,7 @@ contract MIPS {
function WriteMemory(bytes32 stateHash, uint32 addr, uint32 val) public pure returns (bytes32) {
// TODO: does the stateHash mutation
require(addr & 3 == 0, "write memory must be 32-bit aligned");
}
...
...
@@ -37,9 +38,9 @@ contract MIPS {
// zero register is always 0
return 0;
}
assert(addr & 3 == 0); // aligned access only
require(addr & 3 == 0, "read memory must be 32-bit aligned");
uint64 ret = state[stateHash][addr];
assert((ret >> 32) == 1); // was set
require((ret >> 32) == 1, "memory was not initialized");
return uint32(ret);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment