Skip to content
This repository has been archived by the owner on May 13, 2022. It is now read-only.

Commit

Permalink
Merge pull request #1265 from gregdhill/gov-cleanup
Browse files Browse the repository at this point in the history
combine gov package with payload
  • Loading branch information
Sean Young authored Sep 27, 2019
2 parents 133353a + 92a10c7 commit 36275ef
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 78 deletions.
55 changes: 0 additions & 55 deletions governance/governance.go

This file was deleted.

19 changes: 7 additions & 12 deletions integration/core/kernel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,8 @@ import (
"testing"
"time"

"github.com/hyperledger/burrow/logging/loggers"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/hyperledger/burrow/acm"
"github.com/hyperledger/burrow/governance"

"github.com/hyperledger/burrow/acm/balance"
"github.com/hyperledger/burrow/rpc/rpctransact"

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"

"github.com/hyperledger/burrow/config"
"github.com/hyperledger/burrow/event"
"github.com/hyperledger/burrow/execution/exec"
Expand All @@ -34,7 +23,13 @@ import (
"github.com/hyperledger/burrow/keys"
"github.com/hyperledger/burrow/keys/mock"
"github.com/hyperledger/burrow/logging/logconfig"
"github.com/hyperledger/burrow/logging/loggers"
"github.com/hyperledger/burrow/rpc/rpctransact"
"github.com/hyperledger/burrow/txs/payload"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

func TestKernel(t *testing.T) {
Expand Down Expand Up @@ -181,7 +176,7 @@ func bootWaitBlocksShutdown(t testing.TB, validator *acm.PrivateAccount, private

txe, err = tcli.BroadcastTxSync(ctx, &rpctransact.TxEnvelopeParam{
Payload: &payload.Any{
GovTx: governance.AlterBalanceTx(inputAddress, validator, balance.New().Power(pow)),
GovTx: payload.AlterBalanceTx(inputAddress, validator, balance.New().Power(pow)),
},
})
handleTxe(txe, err, errCh)
Expand Down
22 changes: 11 additions & 11 deletions integration/governance/governance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ import (
"github.com/hyperledger/burrow/crypto"
"github.com/hyperledger/burrow/execution/errors"
"github.com/hyperledger/burrow/genesis/spec"
"github.com/hyperledger/burrow/governance"
"github.com/hyperledger/burrow/integration"
"github.com/hyperledger/burrow/integration/rpctest"
"github.com/hyperledger/burrow/permission"
"github.com/hyperledger/burrow/rpc/rpcquery"
"github.com/hyperledger/burrow/txs/payload"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
tmcore "github.com/tendermint/tendermint/rpc/core"
Expand Down Expand Up @@ -62,7 +62,7 @@ func TestGovernance(t *testing.T) {
changePower(vs, 8, 9931)

err := vs.IterateValidators(func(id crypto.Addressable, power *big.Int) error {
_, err := payloadSync(tcli, governance.AlterPowerTx(inputAddress, id, power.Uint64()))
_, err := payloadSync(tcli, payload.AlterPowerTx(inputAddress, id, power.Uint64()))
return err
})
require.NoError(t, err)
Expand All @@ -73,7 +73,7 @@ func TestGovernance(t *testing.T) {
assertValidatorsEqual(t, vs, vsOut)

// Remove validator from chain
_, err = payloadSync(tcli, governance.AlterPowerTx(inputAddress, account(3), 0))
_, err = payloadSync(tcli, payload.AlterPowerTx(inputAddress, account(3), 0))
require.NoError(t, err)

// Mirror in our check set
Expand Down Expand Up @@ -115,15 +115,15 @@ func TestGovernance(t *testing.T) {
acc1 := acm.GeneratePrivateAccountFromSecret("Foo1")
t.Logf("Changing power of new account %v to MaxFlow = %d that should succeed", acc1.GetAddress(), maxFlow)

_, err := payloadSync(tcli, governance.AlterPowerTx(inputAddress, acc1, maxFlow))
_, err := payloadSync(tcli, payload.AlterPowerTx(inputAddress, acc1, maxFlow))
require.NoError(t, err)

maxFlow = getMaxFlow(t, qcli)
power := maxFlow + 1
acc2 := acm.GeneratePrivateAccountFromSecret("Foo2")
t.Logf("Changing power of new account %v to MaxFlow + 1 = %d that should fail", acc2.GetAddress(), power)

_, err = payloadSync(tcli, governance.AlterPowerTx(inputAddress, acc2, power))
_, err = payloadSync(tcli, payload.AlterPowerTx(inputAddress, acc2, power))
require.Error(t, err)
})

Expand All @@ -132,7 +132,7 @@ func TestGovernance(t *testing.T) {
tcli := rpctest.NewTransactClient(t, grpcAddress)
// Account does not have Root permission
inputAddress := genesisAccounts[4].GetAddress()
_, err := payloadSync(tcli, governance.AlterPowerTx(inputAddress, account(5), 3433))
_, err := payloadSync(tcli, payload.AlterPowerTx(inputAddress, account(5), 3433))
require.Error(t, err)
assert.Contains(t, err.Error(), errors.PermissionDenied{Address: inputAddress, Perm: permission.Root}.Error())
})
Expand All @@ -144,7 +144,7 @@ func TestGovernance(t *testing.T) {
qcli := rpctest.NewQueryClient(t, grpcAddress)
var amount uint64 = 18889
acc := account(5)
_, err := payloadSync(tcli, governance.AlterBalanceTx(inputAddress, acc, balance.New().Native(amount)))
_, err := payloadSync(tcli, payload.AlterBalanceTx(inputAddress, acc, balance.New().Native(amount)))
require.NoError(t, err)
ca, err := qcli.GetAccount(context.Background(), &rpcquery.GetAccountParam{Address: acc.GetAddress()})
require.NoError(t, err)
Expand All @@ -159,7 +159,7 @@ func TestGovernance(t *testing.T) {
tcli := rpctest.NewTransactClient(t, grpcAddress)
qcli := rpctest.NewQueryClient(t, grpcAddress)
acc := account(5)
_, err := payloadSync(tcli, governance.AlterPermissionsTx(inputAddress, acc, permission.Send))
_, err := payloadSync(tcli, payload.AlterPermissionsTx(inputAddress, acc, permission.Send))
require.NoError(t, err)
ca, err := qcli.GetAccount(context.Background(), &rpcquery.GetAccountParam{Address: acc.GetAddress()})
require.NoError(t, err)
Expand All @@ -178,7 +178,7 @@ func TestGovernance(t *testing.T) {
qcli := rpctest.NewQueryClient(t, grpcAddress)
var amount uint64 = 18889
acc := acm.GeneratePrivateAccountFromSecret("we almost certainly don't exist")
govTx := governance.AlterBalanceTx(inputAddress, acc, balance.New().Native(amount))
govTx := payload.AlterBalanceTx(inputAddress, acc, balance.New().Native(amount))
_, err := payloadSync(tcli, govTx)
require.NoError(t, err)
ca, err := qcli.GetAccount(context.Background(), &rpcquery.GetAccountParam{Address: acc.GetAddress()})
Expand All @@ -195,7 +195,7 @@ func TestGovernance(t *testing.T) {
acc := account(2)
address := acc.GetAddress()
power := uint64(2445)
_, err := payloadSync(tcli, governance.UpdateAccountTx(inputAddress, &spec.TemplateAccount{
_, err := payloadSync(tcli, payload.UpdateAccountTx(inputAddress, &spec.TemplateAccount{
Address: &address,
Amounts: balance.New().Power(power),
}))
Expand All @@ -213,7 +213,7 @@ func TestGovernance(t *testing.T) {
address := acc.GetAddress()
publicKey := acc.GetPublicKey()
power := uint64(2445)
tx := governance.UpdateAccountTx(inputAddress, &spec.TemplateAccount{
tx := payload.UpdateAccountTx(inputAddress, &spec.TemplateAccount{
Address: &address,
PublicKey: &publicKey,
Amounts: balance.New().Power(power),
Expand Down
52 changes: 52 additions & 0 deletions txs/payload/gov_tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,16 @@ package payload

import (
"fmt"

"github.com/hyperledger/burrow/acm/balance"
"github.com/hyperledger/burrow/crypto"
spec "github.com/hyperledger/burrow/genesis/spec"
permission "github.com/hyperledger/burrow/permission"
)

// GovernanceTx contains functionality for altering permissions, token distribution, consensus parameters,
// validators, and network forks.

func (tx *GovTx) Type() Type {
return TypeGovernance
}
Expand All @@ -21,3 +29,47 @@ func (tx *GovTx) Any() *Any {
GovTx: tx,
}
}

// TODO:
// - Set validator power
// - Set account amount(s)
// - Set account permissions
// - Set global permissions
// - Set ConsensusParams
// Future considerations:
// - Handle network forks/termination/merging/replacement ?
// - Provide transaction in stasis/sudo (voting?)
// - Handle bonding by other means (e.g. pre-shared key permitting n bondings)
// - Network administered proxies (i.e. instead of keys have password authentication for identities - allow calls to originate as if from address without key?)
// Subject to:
// - Less than 1/3 validator power change per block

// Creates a GovTx that alters the validator power of id to the power passed
func AlterPowerTx(inputAddress crypto.Address, id crypto.Addressable, power uint64) *GovTx {
return AlterBalanceTx(inputAddress, id, balance.New().Power(power))
}

func AlterBalanceTx(inputAddress crypto.Address, id crypto.Addressable, bal balance.Balances) *GovTx {
publicKey := id.GetPublicKey()
return UpdateAccountTx(inputAddress, &spec.TemplateAccount{
PublicKey: &publicKey,
Amounts: bal,
})
}

func AlterPermissionsTx(inputAddress crypto.Address, id crypto.Addressable, perms permission.PermFlag) *GovTx {
address := id.GetAddress()
return UpdateAccountTx(inputAddress, &spec.TemplateAccount{
Address: &address,
Permissions: permission.PermFlagToStringList(perms),
})
}

func UpdateAccountTx(inputAddress crypto.Address, updates ...*spec.TemplateAccount) *GovTx {
return &GovTx{
Inputs: []*TxInput{{
Address: inputAddress,
}},
AccountUpdates: updates,
}
}

0 comments on commit 36275ef

Please sign in to comment.