[#105] proxy: Add docs

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2021-07-07 18:34:03 +03:00 committed by Alex Vanin
parent c5ac475d32
commit 18cc26f8c4
2 changed files with 26 additions and 1 deletions

View file

@ -1,2 +1,21 @@
// Proxy contract description. /*
Proxy contract is a contract deployed in NeoFS side chain.
Proxy contract pays for all multi signature transaction executions when notary
service enabled in side chain. Notary service prepares multi signed transaction,
however they should contain side chain GAS to be executed. It is inconvenient to
ask Alphabet nodes to pay for these transactions: nodes can change over time,
some nodes will spend side chain GAS faster, it creates economic instability.
Proxy contract exists to solve this issue. While Alphabet contracts hold all
side chain NEO, proxy contract holds most of the side chain GAS. Alphabet
contracts emits half of the available GAS to the proxy contract. Address of the
Proxy contract is used as the first signer in the multi signature transaction.
Therefore NeoVM executes Verify method of the contract and if invocation is
verified, then Proxy contract pays for the execution.
Contract notifications
Proxy contract does not produce notifications to process.
*/
package proxy package proxy

View file

@ -17,6 +17,7 @@ const (
netmapContractKey = "netmapScriptHash" netmapContractKey = "netmapScriptHash"
) )
// OnNEP17Payment is a callback for NEP-17 compatible native GAS contract.
func OnNEP17Payment(from interop.Hash160, amount int, data interface{}) { func OnNEP17Payment(from interop.Hash160, amount int, data interface{}) {
caller := runtime.GetCallingScriptHash() caller := runtime.GetCallingScriptHash()
if !common.BytesEqual(caller, []byte(gas.Hash)) { if !common.BytesEqual(caller, []byte(gas.Hash)) {
@ -49,6 +50,8 @@ func _deploy(data interface{}, isUpdate bool) {
runtime.Log("proxy contract initialized") runtime.Log("proxy contract initialized")
} }
// Migrate method updates contract source code and manifest. Can be invoked
// only by contract owner.
func Migrate(script []byte, manifest []byte, data interface{}) bool { func Migrate(script []byte, manifest []byte, data interface{}) bool {
ctx := storage.GetReadOnlyContext() ctx := storage.GetReadOnlyContext()
@ -63,6 +66,8 @@ func Migrate(script []byte, manifest []byte, data interface{}) bool {
return true return true
} }
// Verify method returns true if transaction contains valid multi signature of
// Alphabet nodes of the Inner Ring.
func Verify() bool { func Verify() bool {
alphabet := neo.GetCommittee() alphabet := neo.GetCommittee()
sig := common.Multiaddress(alphabet, false) sig := common.Multiaddress(alphabet, false)
@ -75,6 +80,7 @@ func Verify() bool {
return true return true
} }
// Version returns version of the contract.
func Version() int { func Version() int {
return version return version
} }