neoneo-go/pkg/interop/lib/contract/contract.go
Anna Shaleva 6b21ad9922 *: replace interface{} with any keyword
Everywhere including examples, external interop APIs, bindings generators
code and in other valuable places. A couple of `interface{}` usages are
intentionally left in the CHANGELOG.md, documentation and tests.
2023-04-04 13:22:42 +03:00

23 lines
894 B
Go

package contract
import (
"github.com/nspcc-dev/neo-go/pkg/interop"
"github.com/nspcc-dev/neo-go/pkg/interop/contract"
"github.com/nspcc-dev/neo-go/pkg/interop/native/management"
)
// CallWithVersion is a utility function that executes the previously deployed
// blockchain contract with the specified version (update counter) and hash
// (20 bytes in BE form) using the provided arguments and call flags. It fails
// if the contract has version mismatch. It returns whatever this contract
// returns. This function uses `System.Contract.Call` syscall.
func CallWithVersion(scriptHash interop.Hash160, version int, method string, f contract.CallFlag, args ...any) any {
cs := management.GetContract(scriptHash)
if cs == nil {
panic("unknown contract")
}
if cs.UpdateCounter != version {
panic("contract version mismatch")
}
return contract.Call(scriptHash, method, f, args...)
}