diff --git a/go.mod b/go.mod index 35056fb..0dc920a 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/itchyny/base58-go v0.1.0 github.com/ontio/go-bip32 v0.0.0-20190520025953-d3cea6894a2b github.com/ontio/ontology-crypto v1.0.9 - github.com/polynetwork/poly v1.9.1-0.20220424092935-f54fa45801fe + github.com/polynetwork/poly v1.9.1-0.20220512072724-0d14237fd9a1 github.com/stretchr/testify v1.7.0 github.com/tyler-smith/go-bip39 v1.0.2 golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 diff --git a/go.sum b/go.sum index aa9ce30..c0a2c97 100644 --- a/go.sum +++ b/go.sum @@ -1057,8 +1057,8 @@ github.com/polynetwork/cosmos-poly-module v0.0.0-20200810030259-95d586518759/go. github.com/polynetwork/eth-contracts v0.0.0-20200814062128-70f58e22b014/go.mod h1:TeePrYZfWJAwuksPlie7RPequ51Ujp5l/JY6TcutsFc= github.com/polynetwork/poly v0.0.0-20200710095239-0596a3d7afe5/go.mod h1:UzlGEWk0eCGsuMJOZfBoZjRbmu4Yw/SudKAIFe1gPnY= github.com/polynetwork/poly v0.0.0-20200715030435-4f1d1a0adb44/go.mod h1:UzlGEWk0eCGsuMJOZfBoZjRbmu4Yw/SudKAIFe1gPnY= -github.com/polynetwork/poly v1.9.1-0.20220424092935-f54fa45801fe h1:GxB1wJFwQP4wXy7K+BAU1qdyJizEshQbDhHDIz6ljng= -github.com/polynetwork/poly v1.9.1-0.20220424092935-f54fa45801fe/go.mod h1:wq2hnh/fDL/k27rE3d2SFKBswGmND6IyPKevQJYT1hU= +github.com/polynetwork/poly v1.9.1-0.20220512072724-0d14237fd9a1 h1:l6cEH3bgXRa9iNRMJLGmfrIl4i5v2bomYOch6+QZNjU= +github.com/polynetwork/poly v1.9.1-0.20220512072724-0d14237fd9a1/go.mod h1:Jzyw5KKn0VCrcnwrYcs9fdT6NifireXxdTdPV1A0G7M= github.com/polynetwork/poly-go-sdk v0.0.0-20200722030827-6875b6018b93/go.mod h1:a1wMo/VFoUAKX2yVjipvFug6Yu5BPhf/2tP5xywqfIc= github.com/polynetwork/poly-go-sdk v0.0.0-20200730112529-d9c0c7ddf3d8/go.mod h1:a1wMo/VFoUAKX2yVjipvFug6Yu5BPhf/2tP5xywqfIc= github.com/polynetwork/poly-io-test v0.0.0-20200819093740-8cf514b07750/go.mod h1:Y/xz9uHdO0HPz0p+x0bZxNuo1ufVcln3dDjmchSUgso= @@ -1290,6 +1290,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zquestz/grab v0.0.0-20190224022517-abcee96e61b1/go.mod h1:bslhAiUxakrA6z6CHmVyvkfpnxx18RJBwVyx2TluJWw= diff --git a/native_contract.go b/native_contract.go index 9f1dae4..83cf134 100644 --- a/native_contract.go +++ b/native_contract.go @@ -31,6 +31,7 @@ import ( "github.com/polynetwork/poly/native/service/governance/relayer_manager" "github.com/polynetwork/poly/native/service/governance/replenish" "github.com/polynetwork/poly/native/service/governance/side_chain_manager" + "github.com/polynetwork/poly/native/service/governance/signature_manager" hsc "github.com/polynetwork/poly/native/service/header_sync/common" mcnsu "github.com/polynetwork/poly/native/service/utils" "github.com/polynetwork/poly/native/states" @@ -42,6 +43,7 @@ var ( SideChainManagerContractAddress = mcnsu.SideChainManagerContractAddress NodeManagerContractAddress = mcnsu.NodeManagerContractAddress RelayerManagerContractAddress = mcnsu.RelayerManagerContractAddress + SignatureManagerContractAddress = mcnsu.SignatureManagerContractAddress ReplenishContractAddress = mcnsu.ReplenishContractAddress ) @@ -59,6 +61,7 @@ type NativeContract struct { Scm *SideChainManager Nm *NodeManager Rm *RelayerManager + Sm *SignatureManager Rp *Replenish } @@ -69,6 +72,7 @@ func newNativeContract(mcSdk *PolySdk) *NativeContract { native.Scm = &SideChainManager{native: native, mcSdk: mcSdk} native.Nm = &NodeManager{native: native, mcSdk: mcSdk} native.Rm = &RelayerManager{native: native, mcSdk: mcSdk} + native.Sm = &SignatureManager{native: native, mcSdk: mcSdk} native.Rp = &Replenish{native: native, mcSdk: mcSdk} return native } @@ -1114,6 +1118,39 @@ func (this *RelayerManager) ApproveRemoveRelayer(removeID uint64, signer *Accoun return this.mcSdk.SendTransaction(tx) } +type SignatureManager struct { + mcSdk *PolySdk + native *NativeContract +} + +func (this *SignatureManager) NewAddSignatureTransaction(address common.Address, sideChainID uint64, subject, sig []byte) (*types.Transaction, error) { + param := signature_manager.AddSignatureParam{ + Address: address, + SideChainID: sideChainID, + Subject: subject, + Signature: sig, + } + sink := common.NewZeroCopySink(nil) + param.Serialization(sink) + return this.native.NewNativeInvokeTransaction( + TX_VERSION, + SignatureManagerContractAddress, + signature_manager.ADD_SIGNATURE, + sink.Bytes()) +} + +func (this *SignatureManager) AddSignature(sideChainId uint64, subject, sig []byte, signer *Account) (common.Uint256, error) { + tx, err := this.NewAddSignatureTransaction(signer.Address, sideChainId, subject, sig) + if err != nil { + return common.UINT256_EMPTY, err + } + err = this.mcSdk.SignToTransaction(tx, signer) + if err != nil { + return common.UINT256_EMPTY, err + } + return this.mcSdk.SendTransaction(tx) +} + func (this *NodeManager) NewCommitDposTransaction() (*types.Transaction, error) { return this.native.NewNativeInvokeTransaction(