-
Notifications
You must be signed in to change notification settings - Fork 0
/
base_contract.go
70 lines (60 loc) · 2.08 KB
/
base_contract.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//
// Copyright 2019 Insolar Technologies GmbH
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Package foundation server implementation of smartcontract functions
package foundation
import (
"github.com/insolar/insolar/insolar"
"github.com/insolar/insolar/logicrunner/common"
)
// BaseContract is a base class for all contracts.
type BaseContract struct {
}
// ProxyInterface interface any proxy of a contract implements
type ProxyInterface interface {
GetReference() insolar.Reference
GetPrototype() (insolar.Reference, error)
GetCode() (insolar.Reference, error)
}
// BaseContractInterface is an interface to deal with any contract same way
type BaseContractInterface interface {
GetReference() insolar.Reference
GetPrototype() insolar.Reference
GetCode() insolar.Reference
}
// GetReference - Returns public reference of contract
func (bc *BaseContract) GetReference() insolar.Reference {
ctx := bc.GetContext()
if ctx.Callee == nil {
panic("context has no callee set")
}
return *ctx.Callee
}
// GetPrototype - Returns prototype of contract
func (bc *BaseContract) GetPrototype() insolar.Reference {
return *bc.GetContext().Prototype
}
// GetCode - Returns prototype of contract
func (bc *BaseContract) GetCode() insolar.Reference {
return *bc.GetContext().Code
}
// GetContext returns current calling context OBSOLETED.
func (bc *BaseContract) GetContext() *insolar.LogicCallContext {
return GetLogicalContext()
}
// SelfDestruct contract will be marked as deleted
func (bc *BaseContract) SelfDestruct() error {
return common.CurrentProxyCtx.DeactivateObject(bc.GetReference())
}