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 {
|
||||
return handleCandidate(ctx, "registerCandidate", 1001*100000000) // registering costs 1000 GAS
|
||||
return handleCandidate(ctx, "registerCandidate", 100000000) // 1 additional GAS.
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
if sysGas >= 0 {
|
||||
regPrice, err := c.GetCandidateRegisterPrice()
|
||||
if err != nil {
|
||||
return cli.NewExitError(err, 1)
|
||||
}
|
||||
sysGas += regPrice
|
||||
}
|
||||
|
||||
gas := flags.Fixed8FromContext(ctx, "gas")
|
||||
neoContractHash, err := c.GetNativeContractHash(nativenames.Neo)
|
||||
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.
|
||||
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)
|
||||
if err != nil {
|
||||
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.
|
||||
|
|
|
@ -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": {
|
||||
{
|
||||
name: "positive",
|
||||
|
|
Loading…
Reference in a new issue