Merge pull request #604 from cypherstack/add-onchain-notes-for-epic

Add onchain notes for epic
This commit is contained in:
julian-CStack 2023-07-05 11:58:48 -06:00 committed by GitHub
commit aa026ef33c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 163 additions and 9 deletions

@ -1 +1 @@
Subproject commit 3f94722254d1c9ad54036e39a620ccc0bb53863b Subproject commit e1df088733695ad06d377087d069eae1746d55a7

View file

@ -493,6 +493,29 @@ class _ConfirmTransactionViewState
], ],
), ),
), ),
if (coin == Coin.epicCash)
const SizedBox(
height: 12,
),
if (coin == Coin.epicCash)
RoundedWhiteContainer(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
"On chain note",
style: STextStyles.smallMed12(context),
),
const SizedBox(
height: 4,
),
Text(
transactionInfo["onChainNote"] as String,
style: STextStyles.itemSubtitle12(context),
),
],
),
),
const SizedBox( const SizedBox(
height: 12, height: 12,
), ),
@ -501,6 +524,7 @@ class _ConfirmTransactionViewState
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Text( Text(
(coin == Coin.epicCash) ? "Local Note" :
"Note", "Note",
style: STextStyles.smallMed12(context), style: STextStyles.smallMed12(context),
), ),

View file

@ -101,12 +101,14 @@ class _SendViewState extends ConsumerState<SendView> {
late TextEditingController cryptoAmountController; late TextEditingController cryptoAmountController;
late TextEditingController baseAmountController; late TextEditingController baseAmountController;
late TextEditingController noteController; late TextEditingController noteController;
late TextEditingController onChainNoteController;
late TextEditingController feeController; late TextEditingController feeController;
late final SendViewAutoFillData? _data; late final SendViewAutoFillData? _data;
final _addressFocusNode = FocusNode(); final _addressFocusNode = FocusNode();
final _noteFocusNode = FocusNode(); final _noteFocusNode = FocusNode();
final _onChainNoteFocusNode = FocusNode();
final _cryptoFocus = FocusNode(); final _cryptoFocus = FocusNode();
final _baseFocus = FocusNode(); final _baseFocus = FocusNode();
@ -546,6 +548,7 @@ class _SendViewState extends ConsumerState<SendView> {
// pop building dialog // pop building dialog
Navigator.of(context).pop(); Navigator.of(context).pop();
txData["note"] = noteController.text; txData["note"] = noteController.text;
txData["onChainNote"] = onChainNoteController.text;
if (isPaynymSend) { if (isPaynymSend) {
txData["paynymAccountLite"] = widget.accountLite!; txData["paynymAccountLite"] = widget.accountLite!;
} else { } else {
@ -624,6 +627,7 @@ class _SendViewState extends ConsumerState<SendView> {
cryptoAmountController = TextEditingController(); cryptoAmountController = TextEditingController();
baseAmountController = TextEditingController(); baseAmountController = TextEditingController();
noteController = TextEditingController(); noteController = TextEditingController();
onChainNoteController = TextEditingController();
feeController = TextEditingController(); feeController = TextEditingController();
onCryptoAmountChanged = _cryptoAmountChanged; onCryptoAmountChanged = _cryptoAmountChanged;
@ -698,9 +702,11 @@ class _SendViewState extends ConsumerState<SendView> {
cryptoAmountController.dispose(); cryptoAmountController.dispose();
baseAmountController.dispose(); baseAmountController.dispose();
noteController.dispose(); noteController.dispose();
onChainNoteController.dispose();
feeController.dispose(); feeController.dispose();
_noteFocusNode.dispose(); _noteFocusNode.dispose();
_onChainNoteFocusNode.dispose();
_addressFocusNode.dispose(); _addressFocusNode.dispose();
_cryptoFocus.dispose(); _cryptoFocus.dispose();
_baseFocus.dispose(); _baseFocus.dispose();
@ -1794,8 +1800,64 @@ class _SendViewState extends ConsumerState<SendView> {
const SizedBox( const SizedBox(
height: 12, height: 12,
), ),
if (coin == Coin.epicCash)
Text(
"On chain Note (optional)",
style: STextStyles.smallMed12(context),
textAlign: TextAlign.left,
),
if (coin == Coin.epicCash)
const SizedBox(
height: 8,
),
if (coin == Coin.epicCash)
ClipRRect(
borderRadius: BorderRadius.circular(
Constants.size.circularBorderRadius,
),
child: TextField(
autocorrect: Util.isDesktop ? false : true,
enableSuggestions: Util.isDesktop ? false : true,
maxLength: 256,
controller: onChainNoteController,
focusNode: _onChainNoteFocusNode,
style: STextStyles.field(context),
onChanged: (_) => setState(() {}),
decoration: standardInputDecoration(
"Type something...",
_onChainNoteFocusNode,
context,
).copyWith(
suffixIcon: onChainNoteController.text.isNotEmpty
? Padding(
padding:
const EdgeInsets.only(right: 0),
child: UnconstrainedBox(
child: Row(
children: [
TextFieldIconButton(
child: const XIcon(),
onTap: () async {
setState(() {
onChainNoteController.text = "";
});
},
),
],
),
),
)
: null,
),
),
),
if (coin == Coin.epicCash)
const SizedBox(
height: 12,
),
Text( Text(
"Note (optional)", (coin == Coin.epicCash) ? "Local Note (optional)"
: "Note (optional)",
style: STextStyles.smallMed12(context), style: STextStyles.smallMed12(context),
textAlign: TextAlign.left, textAlign: TextAlign.left,
), ),

View file

@ -358,6 +358,9 @@ class _TransactionDetailsViewState
final currentHeight = ref.watch(walletsChangeNotifierProvider final currentHeight = ref.watch(walletsChangeNotifierProvider
.select((value) => value.getManager(walletId).currentHeight)); .select((value) => value.getManager(walletId).currentHeight));
print("THIS TRANSACTION IS $_transaction");
return ConditionalParent( return ConditionalParent(
condition: !isDesktop, condition: !isDesktop,
builder: (child) => Background( builder: (child) => Background(
@ -774,12 +777,71 @@ class _TransactionDetailsViewState
], ],
), ),
), ),
if (coin == Coin.epicCash)
isDesktop
? const _Divider()
: const SizedBox(
height: 12,
),
if (coin == Coin.epicCash)
RoundedWhiteContainer(
padding: isDesktop
? const EdgeInsets.all(16)
: const EdgeInsets.all(12),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
"On chain note",
style: isDesktop
? STextStyles
.desktopTextExtraExtraSmall(
context)
: STextStyles.itemSubtitle(
context),
),
const SizedBox(
height: 8,
),
SelectableText(
_transaction.otherData ?? "",
style: isDesktop
? STextStyles
.desktopTextExtraExtraSmall(
context)
.copyWith(
color: Theme.of(
context)
.extension<
StackColors>()!
.textDark,
)
: STextStyles
.itemSubtitle12(
context),
),
],
),
),
if (isDesktop)
IconCopyButton(
data: _transaction.address.value!.value,
),
],
),
),
isDesktop isDesktop
? const _Divider() ? const _Divider()
: const SizedBox( : const SizedBox(
height: 12, height: 12,
), ),
RoundedWhiteContainer( RoundedWhiteContainer(
padding: isDesktop padding: isDesktop
? const EdgeInsets.all(16) ? const EdgeInsets.all(16)
@ -792,7 +854,7 @@ class _TransactionDetailsViewState
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
"Note", (coin == Coin.epicCash) ? "Local Note" : "Note ",
style: isDesktop style: isDesktop
? STextStyles ? STextStyles
.desktopTextExtraExtraSmall( .desktopTextExtraExtraSmall(
@ -861,7 +923,7 @@ class _TransactionDetailsViewState
notesServiceChangeNotifierProvider( notesServiceChangeNotifierProvider(
walletId) walletId)
.select((value) => value.getNoteFor( .select((value) => value.getNoteFor(
txid: _transaction.txid))), txid: (coin == Coin.epicCash)? _transaction.slateId! : _transaction.txid ))),
builder: (builderContext, builder: (builderContext,
AsyncSnapshot<String> snapshot) { AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == if (snapshot.connectionState ==

View file

@ -156,6 +156,7 @@ Future<void> executeNative(Map<String, dynamic> arguments) async {
final secretKeyIndex = arguments['secretKeyIndex'] as int?; final secretKeyIndex = arguments['secretKeyIndex'] as int?;
final epicboxConfig = arguments['epicboxConfig'] as String?; final epicboxConfig = arguments['epicboxConfig'] as String?;
final minimumConfirmations = arguments['minimumConfirmations'] as int?; final minimumConfirmations = arguments['minimumConfirmations'] as int?;
final onChainNote = arguments['onChainNote'] as String?;
Map<String, dynamic> result = {}; Map<String, dynamic> result = {};
if (!(wallet == null || if (!(wallet == null ||
@ -165,7 +166,7 @@ Future<void> executeNative(Map<String, dynamic> arguments) async {
epicboxConfig == null || epicboxConfig == null ||
minimumConfirmations == null)) { minimumConfirmations == null)) {
var res = await createTransaction(wallet, amount, address, var res = await createTransaction(wallet, amount, address,
secretKeyIndex, epicboxConfig, minimumConfirmations); secretKeyIndex, epicboxConfig, minimumConfirmations, onChainNote!);
result['result'] = res; result['result'] = res;
sendPort.send(result); sendPort.send(result);
return; return;
@ -175,7 +176,7 @@ Future<void> executeNative(Map<String, dynamic> arguments) async {
final selectionStrategyIsAll = final selectionStrategyIsAll =
arguments['selectionStrategyIsAll'] as int?; arguments['selectionStrategyIsAll'] as int?;
final minimumConfirmations = arguments['minimumConfirmations'] as int?; final minimumConfirmations = arguments['minimumConfirmations'] as int?;
final message = arguments['message'] as String?; final message = arguments['onChainNote'] as String?;
final amount = arguments['amount'] as int?; final amount = arguments['amount'] as int?;
final address = arguments['address'] as String?; final address = arguments['address'] as String?;
@ -459,6 +460,7 @@ class EpicCashWallet extends CoinServiceAPI
// TODO determine whether it is worth sending change to a change address. // TODO determine whether it is worth sending change to a change address.
dynamic message; dynamic message;
print("THIS TX DATA IS $txData");
String receiverAddress = txData['addresss'] as String; String receiverAddress = txData['addresss'] as String;
@ -480,7 +482,7 @@ class EpicCashWallet extends CoinServiceAPI
"wallet": wallet!, "wallet": wallet!,
"selectionStrategyIsAll": selectionStrategyIsAll, "selectionStrategyIsAll": selectionStrategyIsAll,
"minimumConfirmations": MINIMUM_CONFIRMATIONS, "minimumConfirmations": MINIMUM_CONFIRMATIONS,
"message": "", "message": txData['onChainNote'],
"amount": (txData['recipientAmt'] as Amount).raw.toInt(), "amount": (txData['recipientAmt'] as Amount).raw.toInt(),
"address": txData['addresss'] as String, "address": txData['addresss'] as String,
}, name: walletName); }, name: walletName);
@ -504,6 +506,7 @@ class EpicCashWallet extends CoinServiceAPI
"secretKeyIndex": 0, "secretKeyIndex": 0,
"epicboxConfig": epicboxConfig.toString(), "epicboxConfig": epicboxConfig.toString(),
"minimumConfirmations": MINIMUM_CONFIRMATIONS, "minimumConfirmations": MINIMUM_CONFIRMATIONS,
"onChainNote": txData['onChainNote'],
}, name: walletName); }, name: walletName);
message = await receivePort.first; message = await receivePort.first;
@ -1721,6 +1724,8 @@ class EpicCashWallet extends CoinServiceAPI
""; "";
String? commitId = slatesToCommits[slateId]?['commitId'] as String?; String? commitId = slatesToCommits[slateId]?['commitId'] as String?;
tx['numberOfMessages'] = tx['messages']?['messages']?.length; tx['numberOfMessages'] = tx['messages']?['messages']?.length;
tx['onChainNote'] = tx['messages']?['messages']?[0]?['message'];
print("ON CHAIN MESSAGE IS ${tx['onChainNote']}");
int? height; int? height;
@ -1754,7 +1759,8 @@ class EpicCashWallet extends CoinServiceAPI
isLelantus: false, isLelantus: false,
slateId: slateId, slateId: slateId,
nonce: null, nonce: null,
otherData: tx["id"].toString(), // otherData: tx["id"].toString(),
otherData: tx['onChainNote'].toString(),
inputs: [], inputs: [],
outputs: [], outputs: [],
numberOfMessages: ((tx["numberOfMessages"] == null) ? 0 : tx["numberOfMessages"]) as int, numberOfMessages: ((tx["numberOfMessages"] == null) ? 0 : tx["numberOfMessages"]) as int,