forked from TrueCloudLab/frostfs-contract
[#105] processing: Add docs
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
726e7995fc
commit
c5ac475d32
2 changed files with 27 additions and 1 deletions
|
@ -1,2 +1,22 @@
|
||||||
// Processing contract description.
|
/*
|
||||||
|
Processing contract is a contract deployed in NeoFS main chain.
|
||||||
|
|
||||||
|
Processing contract pays for all multi signature transaction executions when notary
|
||||||
|
service enabled in main 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.
|
||||||
|
|
||||||
|
Processing contract exists to solve this issue. At the Withdraw invocation of
|
||||||
|
NeoFS contract, user pays fee directly to this contract. This fee is used to
|
||||||
|
pay for Cheque invocation of NeoFS contract that returns main chain GAS back
|
||||||
|
to the user. Address of the Processing contract is uses as the first signer in
|
||||||
|
the multi signature transaction. Therefore NeoVM executes Verify method of the
|
||||||
|
contract and if invocation is verified, then Processing contract pays for the
|
||||||
|
execution.
|
||||||
|
|
||||||
|
Contract notifications
|
||||||
|
|
||||||
|
Processing contract does not produce notifications to process.
|
||||||
|
*/
|
||||||
package processing
|
package processing
|
||||||
|
|
|
@ -18,6 +18,7 @@ const (
|
||||||
multiaddrMethod = "alphabetAddress"
|
multiaddrMethod = "alphabetAddress"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// 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)) {
|
||||||
|
@ -50,6 +51,8 @@ func _deploy(data interface{}, isUpdate bool) {
|
||||||
runtime.Log("processing contract initialized")
|
runtime.Log("processing 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()
|
||||||
|
|
||||||
|
@ -64,6 +67,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 {
|
||||||
ctx := storage.GetContext()
|
ctx := storage.GetContext()
|
||||||
neofsContractAddr := storage.Get(ctx, neofsContractKey).(interop.Hash160)
|
neofsContractAddr := storage.Get(ctx, neofsContractKey).(interop.Hash160)
|
||||||
|
@ -72,6 +77,7 @@ func Verify() bool {
|
||||||
return runtime.CheckWitness(multiaddr)
|
return runtime.CheckWitness(multiaddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Version returns version of the contract.
|
||||||
func Version() int {
|
func Version() int {
|
||||||
return version
|
return version
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue