Merge pull request #2080 from nspcc-dev/improve-candidate-registering

Improve candidate registering
This commit is contained in:
Roman Khimov 2021-07-21 14:26:54 +03:00 committed by GitHub
commit a9db1a2d2e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 2 deletions

View file

@ -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 {

View file

@ -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.

View file

@ -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",