func (es *ErisSigner) Sign(msg []byte) acm.SignatureEd25519 { msgHex := hex.EncodeToString(msg) sig, err := core.Sign(msgHex, es.Address, es.Host) if err != nil { panic(err) } return acm.SignatureEd25519(sig) }
// tx has either one input or we default to the first one (ie for send/bond) // TODO: better support for multisig and bonding func signTx(signAddr, chainID string, tx_ types.Tx) ([]byte, types.Tx, error) { signBytes := fmt.Sprintf("%X", account.SignBytes(chainID, tx_)) var inputAddr []byte var sigED account.SignatureEd25519 switch tx := tx_.(type) { case *types.SendTx: inputAddr = tx.Inputs[0].Address defer func(s *account.SignatureEd25519) { tx.Inputs[0].Signature = *s }(&sigED) case *types.NameTx: inputAddr = tx.Input.Address defer func(s *account.SignatureEd25519) { tx.Input.Signature = *s }(&sigED) case *types.CallTx: inputAddr = tx.Input.Address defer func(s *account.SignatureEd25519) { tx.Input.Signature = *s }(&sigED) case *types.PermissionsTx: inputAddr = tx.Input.Address defer func(s *account.SignatureEd25519) { tx.Input.Signature = *s }(&sigED) case *types.BondTx: inputAddr = tx.Inputs[0].Address defer func(s *account.SignatureEd25519) { tx.Signature = *s tx.Inputs[0].Signature = *s }(&sigED) case *types.UnbondTx: inputAddr = tx.Address defer func(s *account.SignatureEd25519) { tx.Signature = *s }(&sigED) case *types.RebondTx: inputAddr = tx.Address defer func(s *account.SignatureEd25519) { tx.Signature = *s }(&sigED) } addrHex := fmt.Sprintf("%X", inputAddr) sig, err := Sign(signBytes, addrHex, signAddr) if err != nil { return nil, nil, err } sigED = account.SignatureEd25519(sig) logger.Debugf("SIG: %X\n", sig) return inputAddr, tx_, nil }