forked from TrueCloudLab/frostfs-contract
parent
c5ac475d32
commit
18cc26f8c4
2 changed files with 26 additions and 1 deletions
21
proxy/doc.go
21
proxy/doc.go
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue