Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion client/contracts/bindings/oracle/build/OracleMgr.abi
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[{"constant":true,"inputs":[],"name":"maxNumOracles","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getOracleAtIndex","outputs":[{"name":"code","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxNumOracles","type":"uint256"},{"name":"_syncFrequency","type":"uint256"},{"name":"_updatePeriod","type":"uint256"},{"name":"_resolverAddr","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"registerOracle","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOracleCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"submitPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"knsResolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"updatePeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"identity","type":"address"}],"name":"isOracle","outputs":[{"name":"isIndeed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPriceCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getPriceAtIndex","outputs":[{"name":"price","type":"uint256"},{"name":"oracle","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"syncFrequency","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deregisterOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_maxNumOracles","type":"uint256"},{"name":"_syncFrequency","type":"uint256"},{"name":"_updatePeriod","type":"uint256"},{"name":"_resolverAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
[{"constant":true,"inputs":[],"name":"maxNumOracles","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getOracleAtIndex","outputs":[{"name":"code","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxNumOracles","type":"uint256"},{"name":"_syncFrequency","type":"uint256"},{"name":"_updatePeriod","type":"uint256"},{"name":"_resolverAddr","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOracleCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"identity","type":"address"}],"name":"deregisterOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"submitPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"knsResolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"updatePeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"identity","type":"address"}],"name":"isOracle","outputs":[{"name":"isIndeed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPriceCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getPriceAtIndex","outputs":[{"name":"price","type":"uint256"},{"name":"oracle","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"syncFrequency","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"identity","type":"address"}],"name":"registerOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_maxNumOracles","type":"uint256"},{"name":"_syncFrequency","type":"uint256"},{"name":"_updatePeriod","type":"uint256"},{"name":"_resolverAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
2 changes: 1 addition & 1 deletion client/contracts/bindings/oracle/build/OracleMgr.bin

Large diffs are not rendered by default.

52 changes: 26 additions & 26 deletions client/contracts/bindings/oracle/gen_oracle.go

Large diffs are not rendered by default.

154 changes: 148 additions & 6 deletions client/contracts/bindings/oracle/oracle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,144 @@ func (suite *OracleMgrSuite) TestDeploy_SyncFreqGreaterZero_UpdatePeriodGreaterS
req.Error(err, "update period must be less or equal than sync freq")
}

func (suite *OracleMgrSuite) TestRegisterOracle_Paused() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(owner)

// pause service
_, err := suite.oracleMgr.Pause(transactOpts)
req.NoError(err)
suite.Backend.Commit()

// register oracle must fail
_, err = suite.oracleMgr.RegisterOracle(transactOpts, crypto.PubkeyToAddress(user.PublicKey))
req.Error(err, "service is paused")
}

func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_NotOwner() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(user)

// register oracle must fail
_, err := suite.oracleMgr.RegisterOracle(transactOpts, crypto.PubkeyToAddress(owner.PublicKey))
req.Error(err, "not owner")
}

func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_Owner_Duplicate() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(owner)

// register an oracle
_, err := suite.oracleMgr.RegisterOracle(transactOpts, crypto.PubkeyToAddress(user.PublicKey))
req.NoError(err)

suite.Backend.Commit()

// register the same oracle again
_, err = suite.oracleMgr.RegisterOracle(transactOpts, crypto.PubkeyToAddress(user.PublicKey))
req.Error(err, "duplicate registration")
}

func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_Owner_NewCandidate_Full() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(owner)

// register an oracle
_, err := suite.oracleMgr.RegisterOracle(transactOpts, crypto.PubkeyToAddress(owner.PublicKey))
req.NoError(err)

suite.Backend.Commit()

// register the same oracle again
_, err = suite.oracleMgr.RegisterOracle(transactOpts, crypto.PubkeyToAddress(user.PublicKey))
req.Error(err, "duplicate registration")
}

func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_Owner_NewCandidate_NotFull() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(owner)

// register an oracle
userAddr := crypto.PubkeyToAddress(user.PublicKey)
_, err := suite.oracleMgr.RegisterOracle(transactOpts, userAddr)
req.NoError(err)

suite.Backend.Commit()

oracleCount, err := suite.oracleMgr.GetOracleCount(&bind.CallOpts{})
req.NoError(err)
req.NotNil(oracleCount)
req.Equal(common.Big1, oracleCount)

storedOracle, err := suite.oracleMgr.GetOracleAtIndex(&bind.CallOpts{}, common.Big0)
req.NoError(err)
req.NotZero(storedOracle)
req.Equal(storedOracle, userAddr)
}

func (suite *OracleMgrSuite) TestDeregisterOracle_Paused() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(owner)
userAddr := crypto.PubkeyToAddress(user.PublicKey)

// register oracle
_, err := suite.oracleMgr.RegisterOracle(transactOpts, userAddr)
req.NoError(err)

suite.Backend.Commit()

// pause service
_, err = suite.oracleMgr.Pause(transactOpts)
req.NoError(err)
suite.Backend.Commit()

// deregister oracle
_, err = suite.oracleMgr.DeregisterOracle(transactOpts, userAddr)
req.Error(err, "service is paused")
}

func (suite *OracleMgrSuite) TestDeregisterOracle_NotPaused_NotOwner() {
req := suite.Require()

// deregister oracle
transactOpts := bind.NewKeyedTransactor(user)
_, err := suite.oracleMgr.DeregisterOracle(transactOpts, crypto.PubkeyToAddress(owner.PublicKey))
req.Error(err, "not owner")
}

func (suite *OracleMgrSuite) TestDeregisterOracle_NotPaused_Owner_NotOracle() {
req := suite.Require()

// deregister oracle
transactOpts := bind.NewKeyedTransactor(owner)
_, err := suite.oracleMgr.DeregisterOracle(transactOpts, crypto.PubkeyToAddress(user.PublicKey))
req.Error(err, "the user is not an oracle")
}

func (suite *OracleMgrSuite) TestDeregisterOracle_NotPaused_Owner_Oracle() {
req := suite.Require()

transactOpts := bind.NewKeyedTransactor(owner)
userAddr := crypto.PubkeyToAddress(user.PublicKey)

// register oracle
_, err := suite.oracleMgr.RegisterOracle(transactOpts, userAddr)
req.NoError(err)

suite.Backend.Commit()

// deregister oracle
_, err = suite.oracleMgr.DeregisterOracle(transactOpts, userAddr)
req.NoError(err)
}

/*
func (suite *OracleMgrSuite) TestRegisterOracle_Paused() {
req := suite.Require()

Expand Down Expand Up @@ -185,6 +323,7 @@ func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_Duplicate() {
req.Error(err, "duplicate registration")
}


func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_NewCandidate_NotSuperNode() {
req := suite.Require()

Expand All @@ -194,6 +333,7 @@ func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_NewCandidate_NotSuperN
req.Error(err, "user is not a super node")
}


func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_NewCandidate_SuperNode_Full() {
req := suite.Require()

Expand All @@ -208,6 +348,7 @@ func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_NewCandidate_SuperNode
req.Error(err, "no positions available")
}


func (suite *OracleMgrSuite) TestRegisterOracle_NotPaused_NewCandidate_SuperNode_NotFull() {
req := suite.Require()

Expand Down Expand Up @@ -270,13 +411,14 @@ func (suite *OracleMgrSuite) TestDeregisterOracle_NotPaused_Oracle() {
req.NoError(err)
req.Zero(count.Uint64())
}
*/

func (suite *OracleMgrSuite) TestSubmitPrice_Paused() {
req := suite.Require()

// register oracle
registerOpts := bind.NewKeyedTransactor(user)
_, err := suite.oracleMgr.RegisterOracle(registerOpts)
registerOpts := bind.NewKeyedTransactor(owner)
_, err := suite.oracleMgr.RegisterOracle(registerOpts, crypto.PubkeyToAddress(user.PublicKey))
req.NoError(err)

suite.Backend.Commit()
Expand Down Expand Up @@ -304,8 +446,8 @@ func (suite *OracleMgrSuite) TestSubmitPrice_NotPaused_Oracle() {
req := suite.Require()

// register oracle
registerOpts := bind.NewKeyedTransactor(user)
_, err := suite.oracleMgr.RegisterOracle(registerOpts)
registerOpts := bind.NewKeyedTransactor(owner)
_, err := suite.oracleMgr.RegisterOracle(registerOpts, crypto.PubkeyToAddress(user.PublicKey))
req.NoError(err)

suite.Backend.Commit()
Expand All @@ -320,8 +462,8 @@ func (suite *OracleMgrSuite) TestSubmitPrice_NotPaused_Oracle_SubmitPriceTwiceSa
req := suite.Require()

// register oracle
registerOpts := bind.NewKeyedTransactor(user)
_, err := suite.oracleMgr.RegisterOracle(registerOpts)
registerOpts := bind.NewKeyedTransactor(owner)
_, err := suite.oracleMgr.RegisterOracle(registerOpts, crypto.PubkeyToAddress(user.PublicKey))
req.NoError(err)

suite.Backend.Commit()
Expand Down
Loading