forked from TrueCloudLab/neoneo-go
Merge pull request #2080 from nspcc-dev/improve-candidate-registering
Improve candidate registering
This commit is contained in:
commit
a9db1a2d2e
3 changed files with 31 additions and 2 deletions
|
@ -90,7 +90,7 @@ func newValidatorCommands() []cli.Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleRegister(ctx *cli.Context) error {
|
func handleRegister(ctx *cli.Context) error {
|
||||||
return handleCandidate(ctx, "registerCandidate", 1001*100000000) // registering costs 1000 GAS
|
return handleCandidate(ctx, "registerCandidate", 100000000) // 1 additional GAS.
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleUnregister(ctx *cli.Context) error {
|
func handleUnregister(ctx *cli.Context) error {
|
||||||
|
@ -122,6 +122,14 @@ func handleCandidate(ctx *cli.Context, method string, sysGas int64) error {
|
||||||
return cli.NewExitError(err, 1)
|
return cli.NewExitError(err, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sysGas >= 0 {
|
||||||
|
regPrice, err := c.GetCandidateRegisterPrice()
|
||||||
|
if err != nil {
|
||||||
|
return cli.NewExitError(err, 1)
|
||||||
|
}
|
||||||
|
sysGas += regPrice
|
||||||
|
}
|
||||||
|
|
||||||
gas := flags.Fixed8FromContext(ctx, "gas")
|
gas := flags.Fixed8FromContext(ctx, "gas")
|
||||||
neoContractHash, err := c.GetNativeContractHash(nativenames.Neo)
|
neoContractHash, err := c.GetNativeContractHash(nativenames.Neo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -30,11 +30,20 @@ func (c *Client) GetNNSPrice(nnsHash util.Uint160) (int64, error) {
|
||||||
|
|
||||||
// GetGasPerBlock invokes `getGasPerBlock` method on a native NEO contract.
|
// GetGasPerBlock invokes `getGasPerBlock` method on a native NEO contract.
|
||||||
func (c *Client) GetGasPerBlock() (int64, error) {
|
func (c *Client) GetGasPerBlock() (int64, error) {
|
||||||
|
return c.getFromNEO("getGasPerBlock")
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCandidateRegisterPrice invokes `getRegisterPrice` method on native NEO contract.
|
||||||
|
func (c *Client) GetCandidateRegisterPrice() (int64, error) {
|
||||||
|
return c.getFromNEO("getRegisterPrice")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) getFromNEO(meth string) (int64, error) {
|
||||||
neoHash, err := c.GetNativeContractHash(nativenames.Neo)
|
neoHash, err := c.GetNativeContractHash(nativenames.Neo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("failed to get native NEO hash: %w", err)
|
return 0, fmt.Errorf("failed to get native NEO hash: %w", err)
|
||||||
}
|
}
|
||||||
return c.invokeNativeGetMethod(neoHash, "getGasPerBlock")
|
return c.invokeNativeGetMethod(neoHash, meth)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDesignatedByRole invokes `getDesignatedByRole` method on a native RoleManagement contract.
|
// GetDesignatedByRole invokes `getDesignatedByRole` method on a native RoleManagement contract.
|
||||||
|
|
|
@ -478,6 +478,18 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"getCandidateRegisterPrice": {
|
||||||
|
{
|
||||||
|
name: "positive",
|
||||||
|
invoke: func(c *Client) (interface{}, error) {
|
||||||
|
return c.GetCandidateRegisterPrice()
|
||||||
|
},
|
||||||
|
serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"state":"HALT","gasconsumed":"2007390","script":"EMAMDWdldEZlZVBlckJ5dGUMFJphpG7sl7iTBtfOgfFbRiCR0AkyQWJ9W1I=","stack":[{"type":"Integer","value":"100000000000"}],"tx":null}}`,
|
||||||
|
result: func(c *Client) interface{} {
|
||||||
|
return int64(100000000000)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
"getDesignatedByRole": {
|
"getDesignatedByRole": {
|
||||||
{
|
{
|
||||||
name: "positive",
|
name: "positive",
|
||||||
|
|
Loading…
Reference in a new issue