{
return try {
@@ -57,7 +62,7 @@ class BinanceNetworkManager(isTestNet: Boolean) {
for (binanceFee in feeData) {
if (binanceFee.transactionFee != null) {
fee = binanceFee.transactionFee?.value?.toBigDecimal()
- ?.movePointLeft(Blockchain.Binance.decimals.toInt())
+ ?.movePointLeft(Blockchain.Binance.decimals())
break
}
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceResponse.kt
similarity index 87%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceResponse.kt
index 19b1d6790e..94ac501363 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.binance.network
+package com.tangem.blockchain.blockchains.binance.network
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrder.java
similarity index 82%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrder.java
index 25851c0dd9..848458ae27 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
*
@@ -87,15 +87,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.CancelOrder.class, com.tangem.blockchain.binance.proto.CancelOrder.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrder.class, com.tangem.blockchain.blockchains.binance.proto.CancelOrder.Builder.class);
}
public static final int SENDER_FIELD_NUMBER = 1;
@@ -247,10 +247,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.CancelOrder)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.CancelOrder)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.CancelOrder other = (com.tangem.blockchain.binance.proto.CancelOrder) obj;
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrder other = (com.tangem.blockchain.blockchains.binance.proto.CancelOrder) obj;
if (!getSender()
.equals(other.getSender())) return false;
@@ -280,69 +280,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -355,7 +355,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.CancelOrder prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.CancelOrder prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -380,21 +380,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.CancelOrder)
- com.tangem.blockchain.binance.proto.CancelOrderOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrderOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.CancelOrder.class, com.tangem.blockchain.binance.proto.CancelOrder.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrder.class, com.tangem.blockchain.blockchains.binance.proto.CancelOrder.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.CancelOrder.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.CancelOrder.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -424,17 +424,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.CancelOrder getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.CancelOrder.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.CancelOrder getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.CancelOrder.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.CancelOrder build() {
- com.tangem.blockchain.binance.proto.CancelOrder result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.CancelOrder build() {
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrder result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -442,8 +442,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.CancelOrder buildPartial() {
- com.tangem.blockchain.binance.proto.CancelOrder result = new com.tangem.blockchain.binance.proto.CancelOrder(this);
+ public com.tangem.blockchain.blockchains.binance.proto.CancelOrder buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrder result = new com.tangem.blockchain.blockchains.binance.proto.CancelOrder(this);
result.sender_ = sender_;
result.symbol_ = symbol_;
result.refid_ = refid_;
@@ -485,16 +485,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.CancelOrder) {
- return mergeFrom((com.tangem.blockchain.binance.proto.CancelOrder)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.CancelOrder) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.CancelOrder)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.CancelOrder other) {
- if (other == com.tangem.blockchain.binance.proto.CancelOrder.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.CancelOrder other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.CancelOrder.getDefaultInstance()) return this;
if (other.getSender() != com.google.protobuf.ByteString.EMPTY) {
setSender(other.getSender());
}
@@ -521,11 +521,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.CancelOrder parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.CancelOrder parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.CancelOrder) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.CancelOrder) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -770,12 +770,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.CancelOrder)
- private static final com.tangem.blockchain.binance.proto.CancelOrder DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.CancelOrder DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.CancelOrder();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.CancelOrder();
}
- public static com.tangem.blockchain.binance.proto.CancelOrder getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -800,7 +800,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.CancelOrder getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.CancelOrder getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrderOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrderOrBuilder.java
similarity index 95%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrderOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrderOrBuilder.java
index 0e64ead9c6..d38131e1a8 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrderOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrderOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface CancelOrderOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.CancelOrder)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrder.java
similarity index 87%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrder.java
index dbcdad4485..3772da239c 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
*
@@ -112,15 +112,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.NewOrder.class, com.tangem.blockchain.binance.proto.NewOrder.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.NewOrder.class, com.tangem.blockchain.blockchains.binance.proto.NewOrder.Builder.class);
}
public static final int SENDER_FIELD_NUMBER = 1;
@@ -372,10 +372,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.NewOrder)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.NewOrder)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.NewOrder other = (com.tangem.blockchain.binance.proto.NewOrder) obj;
+ com.tangem.blockchain.blockchains.binance.proto.NewOrder other = (com.tangem.blockchain.blockchains.binance.proto.NewOrder) obj;
if (!getSender()
.equals(other.getSender())) return false;
@@ -430,69 +430,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -505,7 +505,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.NewOrder prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.NewOrder prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -530,21 +530,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.NewOrder)
- com.tangem.blockchain.binance.proto.NewOrderOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.NewOrderOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.NewOrder.class, com.tangem.blockchain.binance.proto.NewOrder.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.NewOrder.class, com.tangem.blockchain.blockchains.binance.proto.NewOrder.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.NewOrder.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.NewOrder.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -584,17 +584,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.NewOrder getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.NewOrder.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.NewOrder getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.NewOrder.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.NewOrder build() {
- com.tangem.blockchain.binance.proto.NewOrder result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.NewOrder build() {
+ com.tangem.blockchain.blockchains.binance.proto.NewOrder result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -602,8 +602,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.NewOrder buildPartial() {
- com.tangem.blockchain.binance.proto.NewOrder result = new com.tangem.blockchain.binance.proto.NewOrder(this);
+ public com.tangem.blockchain.blockchains.binance.proto.NewOrder buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.NewOrder result = new com.tangem.blockchain.blockchains.binance.proto.NewOrder(this);
result.sender_ = sender_;
result.id_ = id_;
result.symbol_ = symbol_;
@@ -650,16 +650,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.NewOrder) {
- return mergeFrom((com.tangem.blockchain.binance.proto.NewOrder)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.NewOrder) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.NewOrder)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.NewOrder other) {
- if (other == com.tangem.blockchain.binance.proto.NewOrder.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.NewOrder other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.NewOrder.getDefaultInstance()) return this;
if (other.getSender() != com.google.protobuf.ByteString.EMPTY) {
setSender(other.getSender());
}
@@ -701,11 +701,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.NewOrder parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.NewOrder parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.NewOrder) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.NewOrder) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -1140,12 +1140,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.NewOrder)
- private static final com.tangem.blockchain.binance.proto.NewOrder DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.NewOrder DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.NewOrder();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.NewOrder();
}
- public static com.tangem.blockchain.binance.proto.NewOrder getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.NewOrder getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -1170,7 +1170,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.NewOrder getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.NewOrder getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrderOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrderOrBuilder.java
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrderOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrderOrBuilder.java
index 90cc743439..42c4c45549 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrderOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrderOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface NewOrderOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.NewOrder)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Send.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Send.java
similarity index 75%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/Send.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Send.java
index b5b491d6ac..6a8d21f1f9 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Send.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Send.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
*
@@ -50,20 +50,20 @@ private static final long serialVersionUID = 0L;
break;
case 10: {
if (!((mutable_bitField0_ & 0x00000001) != 0)) {
- inputs_ = new java.util.ArrayList();
+ inputs_ = new java.util.ArrayList();
mutable_bitField0_ |= 0x00000001;
}
inputs_.add(
- input.readMessage(com.tangem.blockchain.binance.proto.Send.Input.parser(), extensionRegistry));
+ input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Input.parser(), extensionRegistry));
break;
}
case 18: {
if (!((mutable_bitField0_ & 0x00000002) != 0)) {
- outputs_ = new java.util.ArrayList();
+ outputs_ = new java.util.ArrayList();
mutable_bitField0_ |= 0x00000002;
}
outputs_.add(
- input.readMessage(com.tangem.blockchain.binance.proto.Send.Output.parser(), extensionRegistry));
+ input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Output.parser(), extensionRegistry));
break;
}
default: {
@@ -93,15 +93,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.class, com.tangem.blockchain.binance.proto.Send.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.class, com.tangem.blockchain.blockchains.binance.proto.Send.Builder.class);
}
public interface TokenOrBuilder extends
@@ -199,15 +199,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.Token.class, com.tangem.blockchain.binance.proto.Send.Token.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token.class, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder.class);
}
public static final int DENOM_FIELD_NUMBER = 1;
@@ -299,10 +299,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.Send.Token)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Token)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.Send.Token other = (com.tangem.blockchain.binance.proto.Send.Token) obj;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token other = (com.tangem.blockchain.blockchains.binance.proto.Send.Token) obj;
if (!getDenom()
.equals(other.getDenom())) return false;
@@ -329,69 +329,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -404,7 +404,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send.Token prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send.Token prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -429,21 +429,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.Send.Token)
- com.tangem.blockchain.binance.proto.Send.TokenOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.Token.class, com.tangem.blockchain.binance.proto.Send.Token.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token.class, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.Send.Token.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.Token.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -471,17 +471,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Token getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Token build() {
- com.tangem.blockchain.binance.proto.Send.Token result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token build() {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -489,8 +489,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Token buildPartial() {
- com.tangem.blockchain.binance.proto.Send.Token result = new com.tangem.blockchain.binance.proto.Send.Token(this);
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token result = new com.tangem.blockchain.blockchains.binance.proto.Send.Token(this);
result.denom_ = denom_;
result.amount_ = amount_;
onBuilt();
@@ -531,16 +531,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.Send.Token) {
- return mergeFrom((com.tangem.blockchain.binance.proto.Send.Token)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Token) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send.Token)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send.Token other) {
- if (other == com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send.Token other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance()) return this;
if (!other.getDenom().isEmpty()) {
denom_ = other.denom_;
onChanged();
@@ -563,11 +563,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.Send.Token parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.Send.Token) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send.Token) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -688,12 +688,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.Send.Token)
- private static final com.tangem.blockchain.binance.proto.Send.Token DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.Send.Token DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send.Token();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send.Token();
}
- public static com.tangem.blockchain.binance.proto.Send.Token getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Token getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -718,7 +718,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Token getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
@@ -736,12 +736,12 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- java.util.List
+ java.util.List
getCoinsList();
/**
* repeated .transaction.Send.Token coins = 2;
*/
- com.tangem.blockchain.binance.proto.Send.Token getCoins(int index);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index);
/**
* repeated .transaction.Send.Token coins = 2;
*/
@@ -749,12 +749,12 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- java.util.List extends com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsOrBuilderList();
/**
* repeated .transaction.Send.Token coins = 2;
*/
- com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+ com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
int index);
}
/**
@@ -805,11 +805,11 @@ private static final long serialVersionUID = 0L;
}
case 18: {
if (!((mutable_bitField0_ & 0x00000002) != 0)) {
- coins_ = new java.util.ArrayList();
+ coins_ = new java.util.ArrayList();
mutable_bitField0_ |= 0x00000002;
}
coins_.add(
- input.readMessage(com.tangem.blockchain.binance.proto.Send.Token.parser(), extensionRegistry));
+ input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Token.parser(), extensionRegistry));
break;
}
default: {
@@ -836,15 +836,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.Input.class, com.tangem.blockchain.binance.proto.Send.Input.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input.class, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder.class);
}
private int bitField0_;
@@ -858,17 +858,17 @@ private static final long serialVersionUID = 0L;
}
public static final int COINS_FIELD_NUMBER = 2;
- private java.util.List coins_;
+ private java.util.List coins_;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List getCoinsList() {
+ public java.util.List getCoinsList() {
return coins_;
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsOrBuilderList() {
return coins_;
}
@@ -881,13 +881,13 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
return coins_.get(index);
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
int index) {
return coins_.get(index);
}
@@ -939,10 +939,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.Send.Input)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Input)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.Send.Input other = (com.tangem.blockchain.binance.proto.Send.Input) obj;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input other = (com.tangem.blockchain.blockchains.binance.proto.Send.Input) obj;
if (!getAddress()
.equals(other.getAddress())) return false;
@@ -970,69 +970,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -1045,7 +1045,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send.Input prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send.Input prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -1066,21 +1066,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.Send.Input)
- com.tangem.blockchain.binance.proto.Send.InputOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.Input.class, com.tangem.blockchain.binance.proto.Send.Input.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input.class, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.Send.Input.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.Input.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -1113,17 +1113,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Input getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Input build() {
- com.tangem.blockchain.binance.proto.Send.Input result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input build() {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -1131,8 +1131,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Input buildPartial() {
- com.tangem.blockchain.binance.proto.Send.Input result = new com.tangem.blockchain.binance.proto.Send.Input(this);
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input result = new com.tangem.blockchain.blockchains.binance.proto.Send.Input(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
result.address_ = address_;
@@ -1184,16 +1184,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.Send.Input) {
- return mergeFrom((com.tangem.blockchain.binance.proto.Send.Input)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Input) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send.Input)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send.Input other) {
- if (other == com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send.Input other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance()) return this;
if (other.getAddress() != com.google.protobuf.ByteString.EMPTY) {
setAddress(other.getAddress());
}
@@ -1238,11 +1238,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.Send.Input parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.Send.Input) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send.Input) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -1282,22 +1282,22 @@ private static final long serialVersionUID = 0L;
return this;
}
- private java.util.List coins_ =
+ private java.util.List coins_ =
java.util.Collections.emptyList();
private void ensureCoinsIsMutable() {
if (!((bitField0_ & 0x00000002) != 0)) {
- coins_ = new java.util.ArrayList(coins_);
+ coins_ = new java.util.ArrayList(coins_);
bitField0_ |= 0x00000002;
}
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List getCoinsList() {
+ public java.util.List getCoinsList() {
if (coinsBuilder_ == null) {
return java.util.Collections.unmodifiableList(coins_);
} else {
@@ -1317,7 +1317,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
if (coinsBuilder_ == null) {
return coins_.get(index);
} else {
@@ -1328,7 +1328,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder setCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
if (coinsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -1345,7 +1345,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder setCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
coins_.set(index, builderForValue.build());
@@ -1358,7 +1358,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public Builder addCoins(com.tangem.blockchain.binance.proto.Send.Token value) {
+ public Builder addCoins(com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
if (coinsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -1375,7 +1375,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
if (coinsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -1392,7 +1392,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addCoins(
- com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
coins_.add(builderForValue.build());
@@ -1406,7 +1406,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
coins_.add(index, builderForValue.build());
@@ -1420,7 +1420,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addAllCoins(
- Iterable extends com.tangem.blockchain.binance.proto.Send.Token> values) {
+ Iterable extends com.tangem.blockchain.blockchains.binance.proto.Send.Token> values) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -1460,14 +1460,14 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token.Builder getCoinsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder getCoinsBuilder(
int index) {
return getCoinsFieldBuilder().getBuilder(index);
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
int index) {
if (coinsBuilder_ == null) {
return coins_.get(index); } else {
@@ -1477,7 +1477,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsOrBuilderList() {
if (coinsBuilder_ != null) {
return coinsBuilder_.getMessageOrBuilderList();
@@ -1488,31 +1488,31 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder() {
return getCoinsFieldBuilder().addBuilder(
- com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder(
int index) {
return getCoinsFieldBuilder().addBuilder(
- index, com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+ index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List
+ public java.util.List
getCoinsBuilderList() {
return getCoinsFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsFieldBuilder() {
if (coinsBuilder_ == null) {
coinsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>(
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>(
coins_,
((bitField0_ & 0x00000002) != 0),
getParentForChildren(),
@@ -1538,12 +1538,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.Send.Input)
- private static final com.tangem.blockchain.binance.proto.Send.Input DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.Send.Input DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send.Input();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send.Input();
}
- public static com.tangem.blockchain.binance.proto.Send.Input getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Input getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -1568,7 +1568,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Input getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
@@ -1586,12 +1586,12 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- java.util.List
+ java.util.List
getCoinsList();
/**
* repeated .transaction.Send.Token coins = 2;
*/
- com.tangem.blockchain.binance.proto.Send.Token getCoins(int index);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index);
/**
* repeated .transaction.Send.Token coins = 2;
*/
@@ -1599,12 +1599,12 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- java.util.List extends com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsOrBuilderList();
/**
* repeated .transaction.Send.Token coins = 2;
*/
- com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+ com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
int index);
}
/**
@@ -1655,11 +1655,11 @@ private static final long serialVersionUID = 0L;
}
case 18: {
if (!((mutable_bitField0_ & 0x00000002) != 0)) {
- coins_ = new java.util.ArrayList();
+ coins_ = new java.util.ArrayList();
mutable_bitField0_ |= 0x00000002;
}
coins_.add(
- input.readMessage(com.tangem.blockchain.binance.proto.Send.Token.parser(), extensionRegistry));
+ input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Token.parser(), extensionRegistry));
break;
}
default: {
@@ -1686,15 +1686,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.Output.class, com.tangem.blockchain.binance.proto.Send.Output.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output.class, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder.class);
}
private int bitField0_;
@@ -1708,17 +1708,17 @@ private static final long serialVersionUID = 0L;
}
public static final int COINS_FIELD_NUMBER = 2;
- private java.util.List coins_;
+ private java.util.List coins_;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List getCoinsList() {
+ public java.util.List getCoinsList() {
return coins_;
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsOrBuilderList() {
return coins_;
}
@@ -1731,13 +1731,13 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
return coins_.get(index);
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
int index) {
return coins_.get(index);
}
@@ -1789,10 +1789,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.Send.Output)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Output)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.Send.Output other = (com.tangem.blockchain.binance.proto.Send.Output) obj;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output other = (com.tangem.blockchain.blockchains.binance.proto.Send.Output) obj;
if (!getAddress()
.equals(other.getAddress())) return false;
@@ -1820,69 +1820,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -1895,7 +1895,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send.Output prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send.Output prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -1916,21 +1916,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.Send.Output)
- com.tangem.blockchain.binance.proto.Send.OutputOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.Output.class, com.tangem.blockchain.binance.proto.Send.Output.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output.class, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.Send.Output.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.Output.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -1963,17 +1963,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Output getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Output build() {
- com.tangem.blockchain.binance.proto.Send.Output result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output build() {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -1981,8 +1981,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Output buildPartial() {
- com.tangem.blockchain.binance.proto.Send.Output result = new com.tangem.blockchain.binance.proto.Send.Output(this);
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output result = new com.tangem.blockchain.blockchains.binance.proto.Send.Output(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
result.address_ = address_;
@@ -2034,16 +2034,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.Send.Output) {
- return mergeFrom((com.tangem.blockchain.binance.proto.Send.Output)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Output) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send.Output)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send.Output other) {
- if (other == com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send.Output other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance()) return this;
if (other.getAddress() != com.google.protobuf.ByteString.EMPTY) {
setAddress(other.getAddress());
}
@@ -2088,11 +2088,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.Send.Output parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.Send.Output) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send.Output) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -2132,22 +2132,22 @@ private static final long serialVersionUID = 0L;
return this;
}
- private java.util.List coins_ =
+ private java.util.List coins_ =
java.util.Collections.emptyList();
private void ensureCoinsIsMutable() {
if (!((bitField0_ & 0x00000002) != 0)) {
- coins_ = new java.util.ArrayList(coins_);
+ coins_ = new java.util.ArrayList(coins_);
bitField0_ |= 0x00000002;
}
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List getCoinsList() {
+ public java.util.List getCoinsList() {
if (coinsBuilder_ == null) {
return java.util.Collections.unmodifiableList(coins_);
} else {
@@ -2167,7 +2167,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
if (coinsBuilder_ == null) {
return coins_.get(index);
} else {
@@ -2178,7 +2178,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder setCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
if (coinsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -2195,7 +2195,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder setCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
coins_.set(index, builderForValue.build());
@@ -2208,7 +2208,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public Builder addCoins(com.tangem.blockchain.binance.proto.Send.Token value) {
+ public Builder addCoins(com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
if (coinsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -2225,7 +2225,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
if (coinsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -2242,7 +2242,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addCoins(
- com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
coins_.add(builderForValue.build());
@@ -2256,7 +2256,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addCoins(
- int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
coins_.add(index, builderForValue.build());
@@ -2270,7 +2270,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Token coins = 2;
*/
public Builder addAllCoins(
- Iterable extends com.tangem.blockchain.binance.proto.Send.Token> values) {
+ Iterable extends com.tangem.blockchain.blockchains.binance.proto.Send.Token> values) {
if (coinsBuilder_ == null) {
ensureCoinsIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -2310,14 +2310,14 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token.Builder getCoinsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder getCoinsBuilder(
int index) {
return getCoinsFieldBuilder().getBuilder(index);
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
int index) {
if (coinsBuilder_ == null) {
return coins_.get(index); } else {
@@ -2327,7 +2327,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsOrBuilderList() {
if (coinsBuilder_ != null) {
return coinsBuilder_.getMessageOrBuilderList();
@@ -2338,31 +2338,31 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder() {
return getCoinsFieldBuilder().addBuilder(
- com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder(
int index) {
return getCoinsFieldBuilder().addBuilder(
- index, com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+ index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
}
/**
* repeated .transaction.Send.Token coins = 2;
*/
- public java.util.List
+ public java.util.List
getCoinsBuilderList() {
return getCoinsFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
getCoinsFieldBuilder() {
if (coinsBuilder_ == null) {
coinsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>(
+ com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>(
coins_,
((bitField0_ & 0x00000002) != 0),
getParentForChildren(),
@@ -2388,12 +2388,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.Send.Output)
- private static final com.tangem.blockchain.binance.proto.Send.Output DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.Send.Output DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send.Output();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send.Output();
}
- public static com.tangem.blockchain.binance.proto.Send.Output getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.Send.Output getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -2418,24 +2418,24 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send.Output getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
public static final int INPUTS_FIELD_NUMBER = 1;
- private java.util.List inputs_;
+ private java.util.List inputs_;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public java.util.List getInputsList() {
+ public java.util.List getInputsList() {
return inputs_;
}
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.InputOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>
getInputsOrBuilderList() {
return inputs_;
}
@@ -2448,29 +2448,29 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.Input getInputs(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input getInputs(int index) {
return inputs_.get(index);
}
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
int index) {
return inputs_.get(index);
}
public static final int OUTPUTS_FIELD_NUMBER = 2;
- private java.util.List outputs_;
+ private java.util.List outputs_;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public java.util.List getOutputsList() {
+ public java.util.List getOutputsList() {
return outputs_;
}
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>
getOutputsOrBuilderList() {
return outputs_;
}
@@ -2483,13 +2483,13 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Output getOutputs(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output getOutputs(int index) {
return outputs_.get(index);
}
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
int index) {
return outputs_.get(index);
}
@@ -2541,10 +2541,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.Send)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.Send other = (com.tangem.blockchain.binance.proto.Send) obj;
+ com.tangem.blockchain.blockchains.binance.proto.Send other = (com.tangem.blockchain.blockchains.binance.proto.Send) obj;
if (!getInputsList()
.equals(other.getInputsList())) return false;
@@ -2574,69 +2574,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.Send parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -2649,7 +2649,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -2674,21 +2674,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.Send)
- com.tangem.blockchain.binance.proto.SendOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.SendOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.Send.class, com.tangem.blockchain.binance.proto.Send.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.Send.class, com.tangem.blockchain.blockchains.binance.proto.Send.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.Send.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -2726,17 +2726,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.Send getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.Send.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.Send getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.Send.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.Send build() {
- com.tangem.blockchain.binance.proto.Send result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.Send build() {
+ com.tangem.blockchain.blockchains.binance.proto.Send result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -2744,8 +2744,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send buildPartial() {
- com.tangem.blockchain.binance.proto.Send result = new com.tangem.blockchain.binance.proto.Send(this);
+ public com.tangem.blockchain.blockchains.binance.proto.Send buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.Send result = new com.tangem.blockchain.blockchains.binance.proto.Send(this);
int from_bitField0_ = bitField0_;
if (inputsBuilder_ == null) {
if (((bitField0_ & 0x00000001) != 0)) {
@@ -2803,16 +2803,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.Send) {
- return mergeFrom((com.tangem.blockchain.binance.proto.Send)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send other) {
- if (other == com.tangem.blockchain.binance.proto.Send.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.Send.getDefaultInstance()) return this;
if (inputsBuilder_ == null) {
if (!other.inputs_.isEmpty()) {
if (inputs_.isEmpty()) {
@@ -2880,11 +2880,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.Send parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.Send parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.Send) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -2895,22 +2895,22 @@ private static final long serialVersionUID = 0L;
}
private int bitField0_;
- private java.util.List inputs_ =
+ private java.util.List inputs_ =
java.util.Collections.emptyList();
private void ensureInputsIsMutable() {
if (!((bitField0_ & 0x00000001) != 0)) {
- inputs_ = new java.util.ArrayList(inputs_);
+ inputs_ = new java.util.ArrayList(inputs_);
bitField0_ |= 0x00000001;
}
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Input, com.tangem.blockchain.binance.proto.Send.Input.Builder, com.tangem.blockchain.binance.proto.Send.InputOrBuilder> inputsBuilder_;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder> inputsBuilder_;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public java.util.List getInputsList() {
+ public java.util.List getInputsList() {
if (inputsBuilder_ == null) {
return java.util.Collections.unmodifiableList(inputs_);
} else {
@@ -2930,7 +2930,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.Input getInputs(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input getInputs(int index) {
if (inputsBuilder_ == null) {
return inputs_.get(index);
} else {
@@ -2941,7 +2941,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Input inputs = 1;
*/
public Builder setInputs(
- int index, com.tangem.blockchain.binance.proto.Send.Input value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input value) {
if (inputsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -2958,7 +2958,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Input inputs = 1;
*/
public Builder setInputs(
- int index, com.tangem.blockchain.binance.proto.Send.Input.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builderForValue) {
if (inputsBuilder_ == null) {
ensureInputsIsMutable();
inputs_.set(index, builderForValue.build());
@@ -2971,7 +2971,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public Builder addInputs(com.tangem.blockchain.binance.proto.Send.Input value) {
+ public Builder addInputs(com.tangem.blockchain.blockchains.binance.proto.Send.Input value) {
if (inputsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -2988,7 +2988,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Input inputs = 1;
*/
public Builder addInputs(
- int index, com.tangem.blockchain.binance.proto.Send.Input value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input value) {
if (inputsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -3005,7 +3005,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Input inputs = 1;
*/
public Builder addInputs(
- com.tangem.blockchain.binance.proto.Send.Input.Builder builderForValue) {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builderForValue) {
if (inputsBuilder_ == null) {
ensureInputsIsMutable();
inputs_.add(builderForValue.build());
@@ -3019,7 +3019,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Input inputs = 1;
*/
public Builder addInputs(
- int index, com.tangem.blockchain.binance.proto.Send.Input.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builderForValue) {
if (inputsBuilder_ == null) {
ensureInputsIsMutable();
inputs_.add(index, builderForValue.build());
@@ -3033,7 +3033,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Input inputs = 1;
*/
public Builder addAllInputs(
- Iterable extends com.tangem.blockchain.binance.proto.Send.Input> values) {
+ Iterable extends com.tangem.blockchain.blockchains.binance.proto.Send.Input> values) {
if (inputsBuilder_ == null) {
ensureInputsIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -3073,14 +3073,14 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.Input.Builder getInputsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder getInputsBuilder(
int index) {
return getInputsFieldBuilder().getBuilder(index);
}
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
int index) {
if (inputsBuilder_ == null) {
return inputs_.get(index); } else {
@@ -3090,7 +3090,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.InputOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>
getInputsOrBuilderList() {
if (inputsBuilder_ != null) {
return inputsBuilder_.getMessageOrBuilderList();
@@ -3101,31 +3101,31 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.Input.Builder addInputsBuilder() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder addInputsBuilder() {
return getInputsFieldBuilder().addBuilder(
- com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance());
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance());
}
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public com.tangem.blockchain.binance.proto.Send.Input.Builder addInputsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder addInputsBuilder(
int index) {
return getInputsFieldBuilder().addBuilder(
- index, com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance());
+ index, com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance());
}
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- public java.util.List
+ public java.util.List
getInputsBuilderList() {
return getInputsFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Input, com.tangem.blockchain.binance.proto.Send.Input.Builder, com.tangem.blockchain.binance.proto.Send.InputOrBuilder>
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>
getInputsFieldBuilder() {
if (inputsBuilder_ == null) {
inputsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Input, com.tangem.blockchain.binance.proto.Send.Input.Builder, com.tangem.blockchain.binance.proto.Send.InputOrBuilder>(
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>(
inputs_,
((bitField0_ & 0x00000001) != 0),
getParentForChildren(),
@@ -3135,22 +3135,22 @@ private static final long serialVersionUID = 0L;
return inputsBuilder_;
}
- private java.util.List outputs_ =
+ private java.util.List outputs_ =
java.util.Collections.emptyList();
private void ensureOutputsIsMutable() {
if (!((bitField0_ & 0x00000002) != 0)) {
- outputs_ = new java.util.ArrayList(outputs_);
+ outputs_ = new java.util.ArrayList(outputs_);
bitField0_ |= 0x00000002;
}
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Output, com.tangem.blockchain.binance.proto.Send.Output.Builder, com.tangem.blockchain.binance.proto.Send.OutputOrBuilder> outputsBuilder_;
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder> outputsBuilder_;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public java.util.List getOutputsList() {
+ public java.util.List getOutputsList() {
if (outputsBuilder_ == null) {
return java.util.Collections.unmodifiableList(outputs_);
} else {
@@ -3170,7 +3170,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Output getOutputs(int index) {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output getOutputs(int index) {
if (outputsBuilder_ == null) {
return outputs_.get(index);
} else {
@@ -3181,7 +3181,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Output outputs = 2;
*/
public Builder setOutputs(
- int index, com.tangem.blockchain.binance.proto.Send.Output value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output value) {
if (outputsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -3198,7 +3198,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Output outputs = 2;
*/
public Builder setOutputs(
- int index, com.tangem.blockchain.binance.proto.Send.Output.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builderForValue) {
if (outputsBuilder_ == null) {
ensureOutputsIsMutable();
outputs_.set(index, builderForValue.build());
@@ -3211,7 +3211,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public Builder addOutputs(com.tangem.blockchain.binance.proto.Send.Output value) {
+ public Builder addOutputs(com.tangem.blockchain.blockchains.binance.proto.Send.Output value) {
if (outputsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -3228,7 +3228,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Output outputs = 2;
*/
public Builder addOutputs(
- int index, com.tangem.blockchain.binance.proto.Send.Output value) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output value) {
if (outputsBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@@ -3245,7 +3245,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Output outputs = 2;
*/
public Builder addOutputs(
- com.tangem.blockchain.binance.proto.Send.Output.Builder builderForValue) {
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builderForValue) {
if (outputsBuilder_ == null) {
ensureOutputsIsMutable();
outputs_.add(builderForValue.build());
@@ -3259,7 +3259,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Output outputs = 2;
*/
public Builder addOutputs(
- int index, com.tangem.blockchain.binance.proto.Send.Output.Builder builderForValue) {
+ int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builderForValue) {
if (outputsBuilder_ == null) {
ensureOutputsIsMutable();
outputs_.add(index, builderForValue.build());
@@ -3273,7 +3273,7 @@ private static final long serialVersionUID = 0L;
* repeated .transaction.Send.Output outputs = 2;
*/
public Builder addAllOutputs(
- Iterable extends com.tangem.blockchain.binance.proto.Send.Output> values) {
+ Iterable extends com.tangem.blockchain.blockchains.binance.proto.Send.Output> values) {
if (outputsBuilder_ == null) {
ensureOutputsIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -3313,14 +3313,14 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Output.Builder getOutputsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder getOutputsBuilder(
int index) {
return getOutputsFieldBuilder().getBuilder(index);
}
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
int index) {
if (outputsBuilder_ == null) {
return outputs_.get(index); } else {
@@ -3330,7 +3330,7 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public java.util.List extends com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>
+ public java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>
getOutputsOrBuilderList() {
if (outputsBuilder_ != null) {
return outputsBuilder_.getMessageOrBuilderList();
@@ -3341,31 +3341,31 @@ private static final long serialVersionUID = 0L;
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Output.Builder addOutputsBuilder() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder addOutputsBuilder() {
return getOutputsFieldBuilder().addBuilder(
- com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance());
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance());
}
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public com.tangem.blockchain.binance.proto.Send.Output.Builder addOutputsBuilder(
+ public com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder addOutputsBuilder(
int index) {
return getOutputsFieldBuilder().addBuilder(
- index, com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance());
+ index, com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance());
}
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- public java.util.List
+ public java.util.List
getOutputsBuilderList() {
return getOutputsFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Output, com.tangem.blockchain.binance.proto.Send.Output.Builder, com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>
getOutputsFieldBuilder() {
if (outputsBuilder_ == null) {
outputsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
- com.tangem.blockchain.binance.proto.Send.Output, com.tangem.blockchain.binance.proto.Send.Output.Builder, com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>(
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>(
outputs_,
((bitField0_ & 0x00000002) != 0),
getParentForChildren(),
@@ -3391,12 +3391,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.Send)
- private static final com.tangem.blockchain.binance.proto.Send DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.Send DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send();
}
- public static com.tangem.blockchain.binance.proto.Send getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.Send getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -3421,7 +3421,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.Send getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.Send getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/SendOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/SendOrBuilder.java
similarity index 61%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/SendOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/SendOrBuilder.java
index 3b619425a2..326ab8de28 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/SendOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/SendOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface SendOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.Send)
@@ -10,12 +10,12 @@ public interface SendOrBuilder extends
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- java.util.List
+ java.util.List
getInputsList();
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- com.tangem.blockchain.binance.proto.Send.Input getInputs(int index);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Input getInputs(int index);
/**
* repeated .transaction.Send.Input inputs = 1;
*/
@@ -23,23 +23,23 @@ public interface SendOrBuilder extends
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- java.util.List extends com.tangem.blockchain.binance.proto.Send.InputOrBuilder>
+ java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>
getInputsOrBuilderList();
/**
* repeated .transaction.Send.Input inputs = 1;
*/
- com.tangem.blockchain.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
+ com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
int index);
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- java.util.List
+ java.util.List
getOutputsList();
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- com.tangem.blockchain.binance.proto.Send.Output getOutputs(int index);
+ com.tangem.blockchain.blockchains.binance.proto.Send.Output getOutputs(int index);
/**
* repeated .transaction.Send.Output outputs = 2;
*/
@@ -47,11 +47,11 @@ public interface SendOrBuilder extends
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- java.util.List extends com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>
+ java.util.List extends com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>
getOutputsOrBuilderList();
/**
* repeated .transaction.Send.Output outputs = 2;
*/
- com.tangem.blockchain.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
+ com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
int index);
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignature.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignature.java
similarity index 77%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignature.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignature.java
index a47f46f543..1cadb9f802 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignature.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignature.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
* Protobuf type {@code transaction.StdSignature}
@@ -85,15 +85,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.StdSignature.class, com.tangem.blockchain.binance.proto.StdSignature.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.Builder.class);
}
public interface PubKeyOrBuilder extends
@@ -163,15 +163,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.binance.proto.StdSignature.PubKey.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.Builder.class);
}
private byte memoizedIsInitialized = -1;
@@ -207,10 +207,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.StdSignature.PubKey)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.StdSignature.PubKey other = (com.tangem.blockchain.binance.proto.StdSignature.PubKey) obj;
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey other = (com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey) obj;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
@@ -228,69 +228,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -303,7 +303,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.StdSignature.PubKey prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -328,21 +328,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.StdSignature.PubKey)
- com.tangem.blockchain.binance.proto.StdSignature.PubKeyOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKeyOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.binance.proto.StdSignature.PubKey.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.StdSignature.PubKey.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -366,17 +366,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.StdSignature.PubKey.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature.PubKey build() {
- com.tangem.blockchain.binance.proto.StdSignature.PubKey result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey build() {
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -384,8 +384,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature.PubKey buildPartial() {
- com.tangem.blockchain.binance.proto.StdSignature.PubKey result = new com.tangem.blockchain.binance.proto.StdSignature.PubKey(this);
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey result = new com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey(this);
onBuilt();
return result;
}
@@ -424,16 +424,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.StdSignature.PubKey) {
- return mergeFrom((com.tangem.blockchain.binance.proto.StdSignature.PubKey)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.StdSignature.PubKey other) {
- if (other == com.tangem.blockchain.binance.proto.StdSignature.PubKey.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.getDefaultInstance()) return this;
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
@@ -449,11 +449,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.StdSignature.PubKey parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.StdSignature.PubKey) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -479,12 +479,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.StdSignature.PubKey)
- private static final com.tangem.blockchain.binance.proto.StdSignature.PubKey DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.StdSignature.PubKey();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey();
}
- public static com.tangem.blockchain.binance.proto.StdSignature.PubKey getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -509,7 +509,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
@@ -628,10 +628,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.StdSignature)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.StdSignature other = (com.tangem.blockchain.binance.proto.StdSignature) obj;
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature other = (com.tangem.blockchain.blockchains.binance.proto.StdSignature) obj;
if (!getPubKey()
.equals(other.getPubKey())) return false;
@@ -667,69 +667,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -742,7 +742,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.StdSignature prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.StdSignature prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -763,21 +763,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.StdSignature)
- com.tangem.blockchain.binance.proto.StdSignatureOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.StdSignatureOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.StdSignature.class, com.tangem.blockchain.binance.proto.StdSignature.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.StdSignature.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.StdSignature.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -809,17 +809,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.StdSignature.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.StdSignature.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature build() {
- com.tangem.blockchain.binance.proto.StdSignature result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature build() {
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -827,8 +827,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature buildPartial() {
- com.tangem.blockchain.binance.proto.StdSignature result = new com.tangem.blockchain.binance.proto.StdSignature(this);
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature result = new com.tangem.blockchain.blockchains.binance.proto.StdSignature(this);
result.pubKey_ = pubKey_;
result.signature_ = signature_;
result.accountNumber_ = accountNumber_;
@@ -871,16 +871,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.StdSignature) {
- return mergeFrom((com.tangem.blockchain.binance.proto.StdSignature)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.StdSignature)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.StdSignature other) {
- if (other == com.tangem.blockchain.binance.proto.StdSignature.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.StdSignature other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.StdSignature.getDefaultInstance()) return this;
if (other.getPubKey() != com.google.protobuf.ByteString.EMPTY) {
setPubKey(other.getPubKey());
}
@@ -908,11 +908,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.StdSignature parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.StdSignature parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.StdSignature) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.StdSignature) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -1096,12 +1096,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.StdSignature)
- private static final com.tangem.blockchain.binance.proto.StdSignature DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.StdSignature DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.StdSignature();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.StdSignature();
}
- public static com.tangem.blockchain.binance.proto.StdSignature getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.StdSignature getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -1126,7 +1126,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.StdSignature getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.StdSignature getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignatureOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignatureOrBuilder.java
similarity index 95%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignatureOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignatureOrBuilder.java
index 622113ae4c..cc73a528fd 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignatureOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignatureOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface StdSignatureOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.StdSignature)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTx.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTx.java
similarity index 88%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTx.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTx.java
index 92c61b4366..637a9f4ac7 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTx.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTx.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
*
@@ -109,15 +109,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.StdTx.class, com.tangem.blockchain.binance.proto.StdTx.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.StdTx.class, com.tangem.blockchain.blockchains.binance.proto.StdTx.Builder.class);
}
private int bitField0_;
@@ -337,10 +337,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.StdTx)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.StdTx)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.StdTx other = (com.tangem.blockchain.binance.proto.StdTx) obj;
+ com.tangem.blockchain.blockchains.binance.proto.StdTx other = (com.tangem.blockchain.blockchains.binance.proto.StdTx) obj;
if (!getMsgsList()
.equals(other.getMsgsList())) return false;
@@ -383,69 +383,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -458,7 +458,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.StdTx prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.StdTx prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -483,21 +483,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.StdTx)
- com.tangem.blockchain.binance.proto.StdTxOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.StdTxOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.StdTx.class, com.tangem.blockchain.binance.proto.StdTx.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.StdTx.class, com.tangem.blockchain.blockchains.binance.proto.StdTx.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.StdTx.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.StdTx.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -531,17 +531,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.StdTx getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.StdTx.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.StdTx getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.StdTx.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.StdTx build() {
- com.tangem.blockchain.binance.proto.StdTx result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.StdTx build() {
+ com.tangem.blockchain.blockchains.binance.proto.StdTx result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -549,8 +549,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.StdTx buildPartial() {
- com.tangem.blockchain.binance.proto.StdTx result = new com.tangem.blockchain.binance.proto.StdTx(this);
+ public com.tangem.blockchain.blockchains.binance.proto.StdTx buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.StdTx result = new com.tangem.blockchain.blockchains.binance.proto.StdTx(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
if (((bitField0_ & 0x00000001) != 0)) {
@@ -605,16 +605,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.StdTx) {
- return mergeFrom((com.tangem.blockchain.binance.proto.StdTx)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.StdTx) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.StdTx)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.StdTx other) {
- if (other == com.tangem.blockchain.binance.proto.StdTx.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.StdTx other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.StdTx.getDefaultInstance()) return this;
if (!other.msgs_.isEmpty()) {
if (msgs_.isEmpty()) {
msgs_ = other.msgs_;
@@ -660,11 +660,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.StdTx parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.StdTx parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.StdTx) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.StdTx) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -1068,12 +1068,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.StdTx)
- private static final com.tangem.blockchain.binance.proto.StdTx DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.StdTx DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.StdTx();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.StdTx();
}
- public static com.tangem.blockchain.binance.proto.StdTx getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.StdTx getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -1098,7 +1098,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.StdTx getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.StdTx getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTxOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTxOrBuilder.java
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTxOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTxOrBuilder.java
index b8e6b81057..1e2f47be6a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTxOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTxOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface StdTxOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.StdTx)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreeze.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreeze.java
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreeze.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreeze.java
index f0cfab3b22..bc61584e2a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreeze.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreeze.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
*
@@ -85,15 +85,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.TokenFreeze.class, com.tangem.blockchain.binance.proto.TokenFreeze.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.Builder.class);
}
public static final int FROM_FIELD_NUMBER = 1;
@@ -217,10 +217,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.TokenFreeze)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.TokenFreeze)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.TokenFreeze other = (com.tangem.blockchain.binance.proto.TokenFreeze) obj;
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreeze other = (com.tangem.blockchain.blockchains.binance.proto.TokenFreeze) obj;
if (!getFrom()
.equals(other.getFrom())) return false;
@@ -251,69 +251,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -326,7 +326,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.TokenFreeze prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.TokenFreeze prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -351,21 +351,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.TokenFreeze)
- com.tangem.blockchain.binance.proto.TokenFreezeOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreezeOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.TokenFreeze.class, com.tangem.blockchain.binance.proto.TokenFreeze.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.TokenFreeze.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -395,17 +395,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.TokenFreeze getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.TokenFreeze.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.TokenFreeze build() {
- com.tangem.blockchain.binance.proto.TokenFreeze result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze build() {
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreeze result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -413,8 +413,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.TokenFreeze buildPartial() {
- com.tangem.blockchain.binance.proto.TokenFreeze result = new com.tangem.blockchain.binance.proto.TokenFreeze(this);
+ public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreeze result = new com.tangem.blockchain.blockchains.binance.proto.TokenFreeze(this);
result.from_ = from_;
result.symbol_ = symbol_;
result.amount_ = amount_;
@@ -456,16 +456,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.TokenFreeze) {
- return mergeFrom((com.tangem.blockchain.binance.proto.TokenFreeze)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.TokenFreeze) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.TokenFreeze)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.TokenFreeze other) {
- if (other == com.tangem.blockchain.binance.proto.TokenFreeze.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.TokenFreeze other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.getDefaultInstance()) return this;
if (other.getFrom() != com.google.protobuf.ByteString.EMPTY) {
setFrom(other.getFrom());
}
@@ -491,11 +491,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.TokenFreeze parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.TokenFreeze) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.TokenFreeze) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -689,12 +689,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.TokenFreeze)
- private static final com.tangem.blockchain.binance.proto.TokenFreeze DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.TokenFreeze DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.TokenFreeze();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.TokenFreeze();
}
- public static com.tangem.blockchain.binance.proto.TokenFreeze getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -719,7 +719,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.TokenFreeze getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreezeOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreezeOrBuilder.java
similarity index 93%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreezeOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreezeOrBuilder.java
index d0e30a2b2a..b4a525e026 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreezeOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreezeOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface TokenFreezeOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.TokenFreeze)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreeze.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreeze.java
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreeze.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreeze.java
index 48167e4b06..e1f660b591 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreeze.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreeze.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
/**
*
@@ -85,15 +85,15 @@ private static final long serialVersionUID = 0L;
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.binance.proto.TokenUnfreeze.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.Builder.class);
}
public static final int FROM_FIELD_NUMBER = 1;
@@ -217,10 +217,10 @@ private static final long serialVersionUID = 0L;
if (obj == this) {
return true;
}
- if (!(obj instanceof com.tangem.blockchain.binance.proto.TokenUnfreeze)) {
+ if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze)) {
return super.equals(obj);
}
- com.tangem.blockchain.binance.proto.TokenUnfreeze other = (com.tangem.blockchain.binance.proto.TokenUnfreeze) obj;
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze other = (com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze) obj;
if (!getFrom()
.equals(other.getFrom())) return false;
@@ -251,69 +251,69 @@ private static final long serialVersionUID = 0L;
return hash;
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(byte[] data)
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseDelimitedFrom(java.io.InputStream input)
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseDelimitedFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
@@ -326,7 +326,7 @@ private static final long serialVersionUID = 0L;
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
- public static Builder newBuilder(com.tangem.blockchain.binance.proto.TokenUnfreeze prototype) {
+ public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
@@ -351,21 +351,21 @@ private static final long serialVersionUID = 0L;
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:transaction.TokenUnfreeze)
- com.tangem.blockchain.binance.proto.TokenUnfreezeOrBuilder {
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreezeOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
.ensureFieldAccessorsInitialized(
- com.tangem.blockchain.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.binance.proto.TokenUnfreeze.Builder.class);
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.Builder.class);
}
- // Construct using com.tangem.blockchain.binance.proto.TokenUnfreeze.newBuilder()
+ // Construct using com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
@@ -395,17 +395,17 @@ private static final long serialVersionUID = 0L;
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
- return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
+ return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
}
@Override
- public com.tangem.blockchain.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
- return com.tangem.blockchain.binance.proto.TokenUnfreeze.getDefaultInstance();
+ public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
+ return com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.getDefaultInstance();
}
@Override
- public com.tangem.blockchain.binance.proto.TokenUnfreeze build() {
- com.tangem.blockchain.binance.proto.TokenUnfreeze result = buildPartial();
+ public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze build() {
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
@@ -413,8 +413,8 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.TokenUnfreeze buildPartial() {
- com.tangem.blockchain.binance.proto.TokenUnfreeze result = new com.tangem.blockchain.binance.proto.TokenUnfreeze(this);
+ public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze buildPartial() {
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze result = new com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze(this);
result.from_ = from_;
result.symbol_ = symbol_;
result.amount_ = amount_;
@@ -456,16 +456,16 @@ private static final long serialVersionUID = 0L;
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
- if (other instanceof com.tangem.blockchain.binance.proto.TokenUnfreeze) {
- return mergeFrom((com.tangem.blockchain.binance.proto.TokenUnfreeze)other);
+ if (other instanceof com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze) {
+ return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze)other);
} else {
super.mergeFrom(other);
return this;
}
}
- public Builder mergeFrom(com.tangem.blockchain.binance.proto.TokenUnfreeze other) {
- if (other == com.tangem.blockchain.binance.proto.TokenUnfreeze.getDefaultInstance()) return this;
+ public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze other) {
+ if (other == com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.getDefaultInstance()) return this;
if (other.getFrom() != com.google.protobuf.ByteString.EMPTY) {
setFrom(other.getFrom());
}
@@ -491,11 +491,11 @@ private static final long serialVersionUID = 0L;
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
- com.tangem.blockchain.binance.proto.TokenUnfreeze parsedMessage = null;
+ com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
- parsedMessage = (com.tangem.blockchain.binance.proto.TokenUnfreeze) e.getUnfinishedMessage();
+ parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
@@ -689,12 +689,12 @@ private static final long serialVersionUID = 0L;
}
// @@protoc_insertion_point(class_scope:transaction.TokenUnfreeze)
- private static final com.tangem.blockchain.binance.proto.TokenUnfreeze DEFAULT_INSTANCE;
+ private static final com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze DEFAULT_INSTANCE;
static {
- DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.TokenUnfreeze();
+ DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze();
}
- public static com.tangem.blockchain.binance.proto.TokenUnfreeze getDefaultInstance() {
+ public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@@ -719,7 +719,7 @@ private static final long serialVersionUID = 0L;
}
@Override
- public com.tangem.blockchain.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
+ public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreezeOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreezeOrBuilder.java
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreezeOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreezeOrBuilder.java
index 7b05351dc3..4b8e0b4d5e 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreezeOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreezeOrBuilder.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public interface TokenUnfreezeOrBuilder extends
// @@protoc_insertion_point(interface_extends:transaction.TokenUnfreeze)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Transaction.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Transaction.java
similarity index 99%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/Transaction.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Transaction.java
index f50167e356..9d79bb6c9b 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Transaction.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Transaction.java
@@ -1,7 +1,7 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: dex.proto
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
public final class Transaction {
private Transaction() {}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressService.kt
similarity index 88%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinAddress.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressService.kt
index 01cdd30770..d4bf305e42 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinAddress.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressService.kt
@@ -1,6 +1,7 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
+import com.tangem.blockchain.common.AddressService
import com.tangem.common.extensions.calculateRipemd160
import com.tangem.common.extensions.calculateSha256
import org.bitcoinj.core.AddressFormatException
@@ -10,25 +11,16 @@ import org.bitcoinj.params.MainNetParams
import org.bitcoinj.params.TestNet3Params
import java.security.MessageDigest
-class BitcoinAddressFactory {
- companion object {
- fun makeAddress(walletPublicKey: ByteArray, testNet: Boolean = false): String {
+class BitcoinAddressService(private val testNet: Boolean = false): AddressService {
+ override fun makeAddress(walletPublicKey: ByteArray): String {
val netSelectionByte = if (testNet) 0x6f.toByte() else 0x00.toByte()
val hash1 = walletPublicKey.calculateSha256().calculateRipemd160()
val hash2 = byteArrayOf(netSelectionByte).plus(hash1).calculateSha256().calculateSha256()
val result = byteArrayOf(netSelectionByte) + hash1 + hash2[0] + hash2[1] + hash2[2] + hash2[3]
return Base58.encode(result)
}
- }
-}
-class BitcoinAddressValidator {
- companion object {
-
- private const val firstLetters = "123nm"
- private const val firstLettersNonTestNet = "13"
-
- fun validate(address: String, testNet: Boolean = false): Boolean {
+ override fun validate(address: String): Boolean {
if (firstLetters.contains(address.first())) {
if (testNet && firstLettersNonTestNet.contains(address.first())) return false
if (address.length !in 26..35) return false
@@ -68,5 +60,9 @@ class BitcoinAddressValidator {
false
}
}
+
+ companion object {
+ private const val firstLetters = "123nm"
+ private const val firstLettersNonTestNet = "13"
}
}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinTransactionBuilder.kt
similarity index 75%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinTransactionBuilder.kt
index 664c45fa0d..ef0cbe5500 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinTransactionBuilder.kt
@@ -1,7 +1,8 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.extensions.Result
+import com.tangem.blockchain.extensions.Result
+import com.tangem.common.extensions.isZero
import org.bitcoinj.core.*
import org.bitcoinj.crypto.TransactionSignature
import org.bitcoinj.script.Script
@@ -9,18 +10,20 @@ import org.bitcoinj.script.ScriptBuilder
import java.math.BigDecimal
import java.math.BigInteger
-class BitcoinTransactionBuilder(private val testNet: Boolean) {
+open class BitcoinTransactionBuilder(
+ private val walletPublicKey: ByteArray, private val testNet: Boolean = false
+) {
private lateinit var transaction: Transaction
- private var networkParameters: NetworkParameters? = null
- var unspentOutputs: List? = null
+ protected var networkParameters: NetworkParameters? = null
+ var unspentOutputs: List? = null
- fun buildToSign(
+ open fun buildToSign(
transactionData: TransactionData): Result> {
if (unspentOutputs == null) return Result.Failure(Exception("Currently there's an unconfirmed transaction"))
- val change: BigDecimal = calculateChange(transactionData)
+ val change: BigDecimal = calculateChange(transactionData, unspentOutputs!!)
networkParameters = if (testNet) {
NetworkParameters.fromID(NetworkParameters.ID_TESTNET)
@@ -37,51 +40,51 @@ class BitcoinTransactionBuilder(private val testNet: Boolean) {
return Result.Success(hashesForSign)
}
- private fun calculateChange(transactionData: TransactionData): BigDecimal {
+ open fun buildToSend(signedTransaction: ByteArray): ByteArray {
+ for (index in transaction.inputs.indices) {
+ transaction.inputs[index].scriptSig = createScript(index, signedTransaction, walletPublicKey)
+ }
+ return transaction.bitcoinSerialize()
+ }
+
+ fun getEstimateSize(transactionData: TransactionData): Result {
+ val buildTransactionResult = buildToSign(transactionData)
+ when (buildTransactionResult) {
+ is Result.Failure -> return buildTransactionResult
+ is Result.Success -> {
+ val hashes = buildTransactionResult.data
+ val finalTransaction = buildToSend(ByteArray(64 * hashes.size) { 1 })
+ return Result.Success(finalTransaction.size)
+ }
+ }
+ }
+
+ fun calculateChange(transactionData: TransactionData, unspentOutputs: List): BigDecimal {
val fullAmount = unspentOutputs!!.map { it.amount }.reduce { acc, number -> acc + number }
return fullAmount - (transactionData.amount.value!! + (transactionData.fee?.value
?: 0.toBigDecimal()))
}
- fun buildToSend(signedTransaction: ByteArray, publicKey: ByteArray): ByteArray {
- for (index in transaction.inputs.indices) {
- transaction.inputs[index].scriptSig = createScript(index, signedTransaction, publicKey)
- }
- return transaction.bitcoinSerialize()
- }
-
- private fun createScript(index: Int, signedTransaction: ByteArray, publicKey: ByteArray): Script {
+ open fun createScript(index: Int, signedTransaction: ByteArray, publicKey: ByteArray): Script {
val r = BigInteger(1, signedTransaction.copyOfRange(index * 64, 32 + index * 64))
val s = BigInteger(1, signedTransaction.copyOfRange(32 + index * 64, 64 + index * 64))
val canonicalS = ECKey.ECDSASignature(r, s).toCanonicalised().s
val signature = TransactionSignature(r, canonicalS)
return ScriptBuilder.createInputScript(signature, ECKey.fromPublicOnly(publicKey))
}
-
- fun getEstimateSize(transactionData: TransactionData, walletPublicKey: ByteArray): Result {
- val buildTransactionResult = buildToSign(transactionData)
- when (buildTransactionResult) {
- is Result.Failure -> return buildTransactionResult
- is Result.Success -> {
- val hashes = buildTransactionResult.data
- val finalTransaction = buildToSend(ByteArray(64 * hashes.size) { 1 }, walletPublicKey)
- return Result.Success(finalTransaction.size)
- }
- }
- }
}
internal fun TransactionData.toBitcoinJTransaction(networkParameters: NetworkParameters?,
- unspentOutputs: List,
+ unspentOutputs: List,
change: BigDecimal): Transaction {
val transaction = Transaction(networkParameters)
for (utxo in unspentOutputs) {
- transaction.addInput(Sha256Hash.wrap(utxo.hash), utxo.outputIndex, Script(utxo.outputScript))
+ transaction.addInput(Sha256Hash.wrap(utxo.transactionHash), utxo.outputIndex, Script(utxo.outputScript))
}
transaction.addOutput(
Coin.parseCoin(this.amount.value!!.toPlainString()),
Address.fromString(networkParameters, this.destinationAddress))
- if (change != 0.toBigDecimal()) {
+ if (!change.isZero()) {
transaction.addOutput(
Coin.parseCoin(change.toPlainString()),
Address.fromString(networkParameters,
@@ -90,9 +93,9 @@ internal fun TransactionData.toBitcoinJTransaction(networkParameters: NetworkPar
return transaction
}
-class UnspentTransaction(
+class BitcoinUnspentOutput(
val amount: BigDecimal,
val outputIndex: Long,
- val hash: ByteArray,
+ val transactionHash: ByteArray,
val outputScript: ByteArray
)
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinWalletManager.kt
new file mode 100644
index 0000000000..0670f32ad4
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinWalletManager.kt
@@ -0,0 +1,93 @@
+package com.tangem.blockchain.blockchains.bitcoin
+
+import android.util.Log
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinAddressResponse
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinProvider
+import com.tangem.blockchain.common.*
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.common.CompletionResult
+import com.tangem.common.extensions.toHexString
+import java.math.BigDecimal
+
+open class BitcoinWalletManager(
+ cardId: String,
+ wallet: Wallet,
+ private val transactionBuilder: BitcoinTransactionBuilder,
+ private val networkManager: BitcoinProvider
+) : WalletManager(cardId, wallet), TransactionSender {
+
+ protected val blockchain = wallet.blockchain
+
+ override suspend fun update() {
+ val response = networkManager.getInfo(wallet.address)
+ when (response) {
+ is Result.Success -> updateWallet(response.data)
+ is Result.Failure -> updateError(response.error)
+ }
+ }
+
+ private fun updateWallet(response: BitcoinAddressResponse) {
+ Log.d(this::class.java.simpleName, "Balance is ${response.balance}")
+ wallet.amounts[AmountType.Coin]?.value = response.balance
+ transactionBuilder.unspentOutputs = response.unspentOutputs
+ if (response.hasUnconfirmed) {
+ if (wallet.transactions.isEmpty()) wallet.addIncomingTransaction()
+ } else {
+ wallet.transactions.clear()
+ }
+ }
+
+ private fun updateError(error: Throwable?) {
+ Log.e(this::class.java.simpleName, error?.message ?: "")
+ if (error != null) throw error
+ }
+
+ override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult {
+ when (val buildTransactionResult = transactionBuilder.buildToSign(transactionData)) {
+ is Result.Failure -> return SimpleResult.Failure(buildTransactionResult.error)
+ is Result.Success -> {
+ when (val signerResponse = signer.sign(buildTransactionResult.data.toTypedArray(), cardId)) {
+ is CompletionResult.Success -> {
+ val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature)
+ return networkManager.sendTransaction(transactionToSend.toHexString())
+ }
+ is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
+ }
+ }
+ }
+ }
+
+ override suspend fun getFee(amount: Amount, destination: String): Result> {
+ when (val feeResult = networkManager.getFee()) {
+ is Result.Failure -> return feeResult
+ is Result.Success -> {
+ val feeValue = BigDecimal.ONE.movePointLeft(blockchain.decimals())
+ amount.value = amount.value!! - feeValue
+ val sizeResult = transactionBuilder.getEstimateSize(
+ TransactionData(amount, Amount(amount, feeValue), wallet.address, destination)
+ )
+ when (sizeResult) {
+ is Result.Failure -> return sizeResult
+ is Result.Success -> {
+ val transactionSize = sizeResult.data.toBigDecimal()
+ val minFee = feeResult.data.minimalPerKb.calculateFee(transactionSize)
+ val normalFee = feeResult.data.normalPerKb.calculateFee(transactionSize)
+ val priorityFee = feeResult.data.priorityPerKb.calculateFee(transactionSize)
+ return Result.Success(
+ listOf(Amount(minFee, blockchain),
+ Amount(normalFee, blockchain),
+ Amount(priorityFee, blockchain))
+ )
+ }
+ }
+ }
+ }
+ }
+
+ private fun BigDecimal.calculateFee(transactionSize: BigDecimal): BigDecimal {
+ val bytesInKb = BigDecimal(1024)
+ return this.divide(bytesInKb).multiply(transactionSize)
+ .setScale(8, BigDecimal.ROUND_DOWN)
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinNetworkManager.kt
similarity index 75%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinNetworkManager.kt
index 55b686591e..8483883d82 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinNetworkManager.kt
@@ -1,21 +1,21 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
-import com.tangem.blockchain.bitcoin.UnspentTransaction
-import com.tangem.blockchain.bitcoin.network.api.BlockchainInfoApi
-import com.tangem.blockchain.bitcoin.network.api.BlockcypherApi
-import com.tangem.blockchain.bitcoin.network.api.EstimatefeeApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_BLOCKCHAIN_INFO
-import com.tangem.blockchain.common.network.API_BLOCKCYPHER
-import com.tangem.blockchain.common.network.API_ESTIMATEFEE
-import com.tangem.blockchain.common.network.createRetrofitInstance
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinUnspentOutput
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockchainInfoApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockcypherApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.EstimatefeeApi
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_BLOCKCHAIN_INFO
+import com.tangem.blockchain.network.API_BLOCKCYPHER
+import com.tangem.blockchain.network.API_ESTIMATEFEE
+import com.tangem.blockchain.network.createRetrofitInstance
import retrofit2.HttpException
import java.io.IOException
import java.math.BigDecimal
-class BitcoinNetworkManager(private val isTestNet: Boolean) : BitcoinProvider {
+class BitcoinNetworkManager(private val isTestNet: Boolean = false) : BitcoinProvider {
private val blockcypherProvider by lazy {
val api = createRetrofitInstance(API_BLOCKCYPHER)
@@ -85,16 +85,12 @@ class BitcoinNetworkManager(private val isTestNet: Boolean) : BitcoinProvider {
}
}
}
-
- companion object {
- val SATOSHI_IN_BTC = 100000000.toBigDecimal()
- }
}
data class BitcoinAddressResponse(
val balance: BigDecimal,
val hasUnconfirmed: Boolean,
- val unspentTransactions: List?
+ val unspentOutputs: List?
)
data class BitcoinFee(
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinProvider.kt
similarity index 57%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinProvider.kt
index e82fb2f67c..13e99f95d3 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinProvider.kt
@@ -1,7 +1,7 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
interface BitcoinProvider {
suspend fun getInfo(address: String): Result
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockchainInfoProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockchainInfoProvider.kt
similarity index 79%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockchainInfoProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockchainInfoProvider.kt
index 7b2882ec57..cb9dc12e6a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockchainInfoProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockchainInfoProvider.kt
@@ -1,12 +1,12 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
-import com.tangem.blockchain.bitcoin.UnspentTransaction
-import com.tangem.blockchain.bitcoin.network.BitcoinNetworkManager.Companion.SATOSHI_IN_BTC
-import com.tangem.blockchain.bitcoin.network.api.BlockchainInfoApi
-import com.tangem.blockchain.bitcoin.network.api.EstimatefeeApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinUnspentOutput
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockchainInfoApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.EstimatefeeApi
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
import com.tangem.common.extensions.hexToBytes
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
@@ -16,6 +16,7 @@ class BlockchainInfoProvider(
private val blockchainApi: BlockchainInfoApi,
private val estimatefeeApi: EstimatefeeApi
) : BitcoinProvider {
+ val decimals = Blockchain.Bitcoin.decimals()
override suspend fun getInfo(address: String): Result {
return try {
@@ -28,8 +29,8 @@ class BlockchainInfoProvider(
val unconfirmedTransactions = addressData.transactions?.find { it.blockHeight == 0L } != null
val bitcoinUnspents = unspents.unspentOutputs.map {
- UnspentTransaction(
- it.amount!!.toBigDecimal().divide(SATOSHI_IN_BTC),
+ BitcoinUnspentOutput(
+ it.amount!!.toBigDecimal().movePointLeft(decimals),
it.outputIndex!!.toLong(),
it.hash!!.hexToBytes(),
it.outputScript!!.hexToBytes())
@@ -37,7 +38,7 @@ class BlockchainInfoProvider(
Result.Success(
BitcoinAddressResponse(
- addressData.finalBalance?.toBigDecimal()?.divide(SATOSHI_IN_BTC)
+ addressData.finalBalance?.toBigDecimal()?.movePointLeft(decimals)
?: 0.toBigDecimal(), unconfirmedTransactions, bitcoinUnspents))
}
} catch (exception: Exception) {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockcypherProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockcypherProvider.kt
similarity index 64%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockcypherProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockcypherProvider.kt
index 94c9e3dd17..58b6bec6a4 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockcypherProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockcypherProvider.kt
@@ -1,19 +1,20 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
-import com.tangem.blockchain.bitcoin.UnspentTransaction
-import com.tangem.blockchain.bitcoin.network.BitcoinNetworkManager.Companion.SATOSHI_IN_BTC
-import com.tangem.blockchain.bitcoin.network.api.BlockcypherApi
-import com.tangem.blockchain.bitcoin.network.api.BlockcypherBody
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherFee
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherResponse
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinUnspentOutput
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockcypherApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockcypherBody
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherFee
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherResponse
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
import com.tangem.common.extensions.hexToBytes
class BlockcypherProvider(private val api: BlockcypherApi, isTestNet: Boolean) : BitcoinProvider {
private val blockchain = "btc"
+ private val decimals = Blockchain.Bitcoin.decimals()
private val network = if (isTestNet) {
BlockcypherNetwork.Test.network
@@ -25,15 +26,15 @@ class BlockcypherProvider(private val api: BlockcypherApi, isTestNet: Boolean) :
try {
val addressData: BlockcypherResponse = retryIO { api.getAddressData(blockchain, network, address) }
val unspents = addressData.txrefs?.map {
- UnspentTransaction(
- it.amount!!.toBigDecimal().divide(SATOSHI_IN_BTC),
+ BitcoinUnspentOutput(
+ it.amount!!.toBigDecimal().movePointLeft(decimals),
it.outputIndex!!.toLong(),
it.hash!!.hexToBytes(),
it.outputScript!!.hexToBytes()
)
}
return Result.Success(BitcoinAddressResponse(
- addressData.balance!!.toBigDecimal().divide(SATOSHI_IN_BTC),
+ addressData.balance!!.toBigDecimal().movePointLeft(decimals),
addressData.unconfirmedBalance != 0L,
unspents))
@@ -43,27 +44,27 @@ class BlockcypherProvider(private val api: BlockcypherApi, isTestNet: Boolean) :
}
override suspend fun getFee(): Result {
- try {
+ return try {
val receivedFee: BlockcypherFee = retryIO { api.getFee(blockchain, network) }
- return Result.Success(
- BitcoinFee(receivedFee.minFeePerKb!!.toBigDecimal().divide(SATOSHI_IN_BTC),
- receivedFee.normalFeePerKb!!.toBigDecimal().divide(SATOSHI_IN_BTC),
- receivedFee.priorityFeePerKb!!.toBigDecimal().divide(SATOSHI_IN_BTC))
+ Result.Success(
+ BitcoinFee(receivedFee.minFeePerKb!!.toBigDecimal().movePointLeft(decimals),
+ receivedFee.normalFeePerKb!!.toBigDecimal().movePointLeft(decimals),
+ receivedFee.priorityFeePerKb!!.toBigDecimal().movePointLeft(decimals))
)
} catch (error: Exception) {
- return Result.Failure(error)
+ Result.Failure(error)
}
}
override suspend fun sendTransaction(transaction: String): SimpleResult {
- try {
+ return try {
retryIO {
api.sendTransaction(
blockchain, network, BlockcypherBody(transaction), BlockcypherToken.getToken())
}
- return SimpleResult.Success
+ SimpleResult.Success
} catch (error: Exception) {
- return SimpleResult.Failure(error)
+ SimpleResult.Failure(error)
}
}
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockchainInfoApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockchainInfoApi.kt
similarity index 64%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockchainInfoApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockchainInfoApi.kt
index 1b43631d5a..294846b58c 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockchainInfoApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockchainInfoApi.kt
@@ -1,7 +1,7 @@
-package com.tangem.blockchain.bitcoin.network.api
+package com.tangem.blockchain.blockchains.bitcoin.network.api
-import com.tangem.blockchain.bitcoin.network.response.BlockchainInfoAddress
-import com.tangem.blockchain.bitcoin.network.response.BlockchainInfoUnspents
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockchainInfoAddress
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockchainInfoUnspents
import okhttp3.ResponseBody
import retrofit2.http.*
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockcypherApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockcypherApi.kt
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockcypherApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockcypherApi.kt
index 755191e81e..14b78b0e53 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockcypherApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockcypherApi.kt
@@ -1,9 +1,9 @@
-package com.tangem.blockchain.bitcoin.network.api
+package com.tangem.blockchain.blockchains.bitcoin.network.api
import com.squareup.moshi.JsonClass
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherFee
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherResponse
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherTx
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherFee
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherResponse
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherTx
import retrofit2.http.*
interface BlockcypherApi {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/EstimateFeeApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/EstimateFeeApi.kt
similarity index 85%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/EstimateFeeApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/EstimateFeeApi.kt
index 22e95304db..393e03a00b 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/EstimateFeeApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/EstimateFeeApi.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.bitcoin.network.api
+package com.tangem.blockchain.blockchains.bitcoin.network.api
import retrofit2.http.GET
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockchainInfoResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockchainInfoResponse.kt
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockchainInfoResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockchainInfoResponse.kt
index 015d867985..e7ec0f2734 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockchainInfoResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockchainInfoResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.bitcoin.network.response
+package com.tangem.blockchain.blockchains.bitcoin.network.response
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockcypherResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockcypherResponse.kt
similarity index 95%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockcypherResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockcypherResponse.kt
index b1e869797a..a0e79c45b2 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockcypherResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockcypherResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.bitcoin.network.response
+package com.tangem.blockchain.blockchains.bitcoin.network.response
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashAddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashAddressService.kt
new file mode 100644
index 0000000000..20e41a0b49
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashAddressService.kt
@@ -0,0 +1,23 @@
+package com.tangem.blockchain.blockchains.bitcoincash
+
+import com.tangem.blockchain.blockchains.bitcoincash.cashaddr.BitcoinCashAddressType
+import com.tangem.blockchain.blockchains.bitcoincash.cashaddr.CashAddr
+import com.tangem.blockchain.common.AddressService
+import com.tangem.common.extensions.calculateRipemd160
+import com.tangem.common.extensions.calculateSha256
+import com.tangem.common.extensions.toCompressedPublicKey
+
+class BitcoinCashAddressService() : AddressService {
+ override fun makeAddress(walletPublicKey: ByteArray): String {
+ val publicKeyHash = walletPublicKey.toCompressedPublicKey().calculateSha256().calculateRipemd160()
+ return CashAddr.toCashAddress(BitcoinCashAddressType.P2PKH, publicKeyHash)
+ }
+
+ override fun validate(address: String): Boolean {
+ return CashAddr.isValidCashAddress(address)
+ }
+
+ fun getPublicKeyHash(address: String): ByteArray {
+ return CashAddr.decodeCashAddress(address).hash
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashNetworkManager.kt
new file mode 100644
index 0000000000..5a594aa312
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashNetworkManager.kt
@@ -0,0 +1,33 @@
+package com.tangem.blockchain.blockchains.bitcoincash
+
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinAddressResponse
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinFee
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinProvider
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_BLOCKCHAIR
+import com.tangem.blockchain.network.blockchair.BlockchairApi
+import com.tangem.blockchain.network.blockchair.BlockchairProvider
+import com.tangem.blockchain.network.createRetrofitInstance
+
+class BitcoinCashNetworkManager : BitcoinProvider {
+ private val blockchain: Blockchain = Blockchain.BitcoinCash
+
+ private val blockchairProvider by lazy {
+ val api = createRetrofitInstance(API_BLOCKCHAIR).create(BlockchairApi::class.java)
+ BlockchairProvider(api, blockchain)
+ }
+
+ override suspend fun getInfo(address: String): Result {
+ return blockchairProvider.getInfo(address)
+ }
+
+ override suspend fun getFee(): Result {
+ return blockchairProvider.getFee()
+ }
+
+ override suspend fun sendTransaction(transaction: String): SimpleResult {
+ return blockchairProvider.sendTransaction(transaction)
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashTransaction.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashTransaction.java
new file mode 100644
index 0000000000..ec339789c1
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashTransaction.java
@@ -0,0 +1,110 @@
+package com.tangem.blockchain.blockchains.bitcoincash;
+
+import org.bitcoinj.core.Coin;
+import org.bitcoinj.core.NetworkParameters;
+import org.bitcoinj.core.Sha256Hash;
+import org.bitcoinj.core.Transaction;
+import org.bitcoinj.core.TransactionInput;
+import org.bitcoinj.core.TransactionOutput;
+import org.bitcoinj.core.UnsafeByteArrayOutputStream;
+import org.bitcoinj.core.VarInt;
+import org.bitcoinj.crypto.TransactionSignature;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.List;
+
+import static org.bitcoinj.core.Utils.uint32ToByteStreamLE;
+import static org.bitcoinj.core.Utils.uint64ToByteStreamLE;
+
+// logic from https://github.com/pokkst/bitcoincashj
+public class BitcoinCashTransaction extends Transaction {
+// private ArrayList inputs;
+// private ArrayList outputs;
+
+// private long version;
+// private long lockTime;
+
+ public final byte SIGHASH_FORK_ID = 0x40;
+
+ public BitcoinCashTransaction(NetworkParameters params) {
+ super(params);
+ }
+
+ public synchronized Sha256Hash hashForSignatureWitness(
+ int inputIndex,
+ byte[] connectedScript,
+ Coin prevValue,
+ SigHash type,
+ boolean anyoneCanPay)
+ {
+ byte sigHashType = (byte) TransactionSignature.calcSigHashValue(type, anyoneCanPay);
+ sigHashType |= SIGHASH_FORK_ID;
+
+ ByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(length == UNKNOWN_LENGTH ? 256 : length + 4);
+ try {
+ byte[] hashPrevouts = new byte[32];
+ byte[] hashSequence = new byte[32];
+ byte[] hashOutputs = new byte[32];
+ anyoneCanPay = (sigHashType & SIGHASH_ANYONECANPAY_VALUE) == SIGHASH_ANYONECANPAY_VALUE;
+ List inputs = getInputs();
+ List outputs = getOutputs();
+
+ if (!anyoneCanPay) {
+ ByteArrayOutputStream bosHashPrevouts = new UnsafeByteArrayOutputStream(256);
+ for (int i = 0; i < inputs.size(); ++i) {
+ bosHashPrevouts.write(inputs.get(i).getOutpoint().getHash().getReversedBytes());
+ uint32ToByteStreamLE(inputs.get(i).getOutpoint().getIndex(), bosHashPrevouts);
+ }
+ hashPrevouts = Sha256Hash.hashTwice(bosHashPrevouts.toByteArray());
+ }
+
+ if (!anyoneCanPay && type != SigHash.SINGLE && type != SigHash.NONE) {
+ ByteArrayOutputStream bosSequence = new UnsafeByteArrayOutputStream(256);
+ for (int i = 0; i < inputs.size(); ++i) {
+ uint32ToByteStreamLE(inputs.get(i).getSequenceNumber(), bosSequence);
+ }
+ hashSequence = Sha256Hash.hashTwice(bosSequence.toByteArray());
+ }
+
+ if (type != SigHash.SINGLE && type != SigHash.NONE) {
+ ByteArrayOutputStream bosHashOutputs = new UnsafeByteArrayOutputStream(256);
+ for (int i = 0; i < outputs.size(); ++i) {
+ uint64ToByteStreamLE(
+ BigInteger.valueOf(outputs.get(i).getValue().getValue()),
+ bosHashOutputs
+ );
+ bosHashOutputs.write(new VarInt(outputs.get(i).getScriptBytes().length).encode());
+ bosHashOutputs.write(outputs.get(i).getScriptBytes());
+ }
+ hashOutputs = Sha256Hash.hashTwice(bosHashOutputs.toByteArray());
+ } else if (type == SigHash.SINGLE && inputIndex < outputs.size()) {
+ ByteArrayOutputStream bosHashOutputs = new UnsafeByteArrayOutputStream(256);
+ uint64ToByteStreamLE(
+ BigInteger.valueOf(outputs.get(inputIndex).getValue().getValue()),
+ bosHashOutputs
+ );
+ bosHashOutputs.write(new VarInt(outputs.get(inputIndex).getScriptBytes().length).encode());
+ bosHashOutputs.write(outputs.get(inputIndex).getScriptBytes());
+ hashOutputs = Sha256Hash.hashTwice(bosHashOutputs.toByteArray());
+ }
+ uint32ToByteStreamLE(getVersion(), bos);
+ bos.write(hashPrevouts);
+ bos.write(hashSequence);
+ bos.write(inputs.get(inputIndex).getOutpoint().getHash().getReversedBytes());
+ uint32ToByteStreamLE(inputs.get(inputIndex).getOutpoint().getIndex(), bos);
+ bos.write(new VarInt(connectedScript.length).encode());
+ bos.write(connectedScript);
+ uint64ToByteStreamLE(BigInteger.valueOf(prevValue.getValue()), bos);
+ uint32ToByteStreamLE(inputs.get(inputIndex).getSequenceNumber(), bos);
+ bos.write(hashOutputs);
+ uint32ToByteStreamLE(getLockTime(), bos);
+ uint32ToByteStreamLE(0x000000ff & sigHashType, bos);
+ } catch (IOException e) {
+ throw new RuntimeException(e); // Cannot happen.
+ }
+
+ return Sha256Hash.twiceOf(bos.toByteArray());
+ }
+}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashTransactionBuilder.kt
new file mode 100644
index 0000000000..58bec1f6e3
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashTransactionBuilder.kt
@@ -0,0 +1,82 @@
+package com.tangem.blockchain.blockchains.bitcoincash
+
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinTransactionBuilder
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinUnspentOutput
+import com.tangem.blockchain.common.TransactionData
+import com.tangem.blockchain.extensions.Result
+import com.tangem.common.extensions.isZero
+import org.bitcoinj.core.*
+import org.bitcoinj.core.LegacyAddress.fromPubKeyHash
+import org.bitcoinj.crypto.TransactionSignature
+import org.bitcoinj.script.Script
+import org.bitcoinj.script.ScriptBuilder
+import java.math.BigDecimal
+import java.math.BigInteger
+
+class BitcoinCashTransactionBuilder(private val walletPublicKey: ByteArray)
+ : BitcoinTransactionBuilder(walletPublicKey) {
+
+ private lateinit var transaction: BitcoinCashTransaction
+
+ override fun buildToSign(
+ transactionData: TransactionData): Result> {
+
+ if (unspentOutputs == null) return Result.Failure(Exception("Currently there's an unconfirmed transaction"))
+
+ val change: BigDecimal = calculateChange(transactionData, unspentOutputs!!)
+
+ networkParameters = NetworkParameters.fromID(NetworkParameters.ID_MAINNET)
+ transaction = transactionData.toBitcoinCashTransaction(networkParameters, unspentOutputs!!, change)
+
+ val hashesForSign: MutableList = MutableList(transaction.inputs.size) { byteArrayOf() }
+ for (input in transaction.inputs) {
+ val index = input.index
+ val value = Coin.parseCoin(unspentOutputs!![index].amount.toString())
+ hashesForSign[index] = transaction.hashForSignatureWitness(index, input.scriptBytes, value, Transaction.SigHash.ALL, false).bytes
+ }
+ return Result.Success(hashesForSign)
+ }
+
+ override fun buildToSend(signedTransaction: ByteArray): ByteArray {
+ for (index in transaction.inputs.indices) {
+ transaction.inputs[index].scriptSig = createScript(index, signedTransaction, walletPublicKey)
+ }
+ return transaction.bitcoinSerialize()
+ }
+
+ override fun createScript(index: Int, signedTransaction: ByteArray, publicKey: ByteArray): Script {
+ val r = BigInteger(1, signedTransaction.copyOfRange(index * 64, 32 + index * 64))
+ val s = BigInteger(1, signedTransaction.copyOfRange(32 + index * 64, 64 + index * 64))
+ val canonicalS = ECKey.ECDSASignature(r, s).toCanonicalised().s
+
+ val sigHash = 0x41
+ val signature = TransactionSignature(r, canonicalS, sigHash)
+ return ScriptBuilder.createInputScript(signature, ECKey.fromPublicOnly(publicKey))
+ }
+}
+
+internal fun TransactionData.toBitcoinCashTransaction(networkParameters: NetworkParameters?,
+ unspentOutputs: List,
+ change: BigDecimal): BitcoinCashTransaction {
+ val transaction = BitcoinCashTransaction(networkParameters)
+ for (utxo in unspentOutputs) {
+ transaction.addInput(Sha256Hash.wrap(utxo.transactionHash), utxo.outputIndex, Script(utxo.outputScript))
+ }
+ val addressService = BitcoinCashAddressService()
+ val sourceLegacyAddress =
+ fromPubKeyHash(networkParameters, addressService.getPublicKeyHash(this.sourceAddress))
+ val destinationLegacyAddress =
+ fromPubKeyHash(networkParameters, addressService.getPublicKeyHash(this.destinationAddress))
+
+ transaction.addOutput(
+ Coin.parseCoin(this.amount.value!!.toPlainString()),
+ destinationLegacyAddress
+ )
+ if (!change.isZero()) {
+ transaction.addOutput(
+ Coin.parseCoin(change.toPlainString()),
+ sourceLegacyAddress
+ )
+ }
+ return transaction
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashWalletManager.kt
new file mode 100644
index 0000000000..b0793c6cf9
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashWalletManager.kt
@@ -0,0 +1,28 @@
+package com.tangem.blockchain.blockchains.bitcoincash
+
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinWalletManager
+import com.tangem.blockchain.common.Amount
+import com.tangem.blockchain.common.TransactionSender
+import com.tangem.blockchain.common.Wallet
+import com.tangem.blockchain.extensions.Result
+import java.math.BigDecimal
+
+class BitcoinCashWalletManager(
+ cardId: String,
+ wallet: Wallet,
+ private val transactionBuilder: BitcoinCashTransactionBuilder,
+ private val networkManager: BitcoinCashNetworkManager
+) : BitcoinWalletManager(cardId, wallet, transactionBuilder, networkManager), TransactionSender {
+ override suspend fun getFee(amount: Amount, destination: String): Result> {
+ val minimalFee = BigDecimal("0.00001")
+ when (val result = super.getFee(amount, destination)) {
+ is Result.Success -> {
+ for (fee in result.data) {
+ if (fee.value!! < minimalFee) fee.value = minimalFee
+ }
+ return result
+ }
+ is Result.Failure -> return result
+ }
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashAddressDecodedParts.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashAddressDecodedParts.java
new file mode 100644
index 0000000000..b3675c1f52
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashAddressDecodedParts.java
@@ -0,0 +1,37 @@
+package com.tangem.blockchain.blockchains.bitcoincash.cashaddr;
+
+// Helper class for CashAddr
+
+public class BitcoinCashAddressDecodedParts {
+
+ String prefix;
+
+ BitcoinCashAddressType addressType;
+
+ byte[] hash;
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ public BitcoinCashAddressType getAddressType() {
+ return addressType;
+ }
+
+ public void setAddressType(BitcoinCashAddressType addressType) {
+ this.addressType = addressType;
+ }
+
+ public byte[] getHash() {
+ return hash;
+ }
+
+ public void setHash(byte[] hash) {
+ this.hash = hash;
+ }
+
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashAddressType.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashAddressType.java
new file mode 100644
index 0000000000..8654b29a1c
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashAddressType.java
@@ -0,0 +1,23 @@
+package com.tangem.blockchain.blockchains.bitcoincash.cashaddr;
+
+
+/**
+ * Copyright (c) 2018 Tobias Brandt
+ *
+ * Distributed under the MIT software license, see the accompanying file LICENSE
+ * or http://www.opensource.org/licenses/mit-license.php.
+ */
+public enum BitcoinCashAddressType {
+
+ P2PKH((byte) 0), P2SH((byte) 8);
+
+ private final byte versionByte;
+
+ BitcoinCashAddressType(byte versionByte) {
+ this.versionByte = versionByte;
+ }
+
+ public byte getVersionByte() {
+ return versionByte;
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashBase32.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashBase32.java
new file mode 100644
index 0000000000..04f3fef9f4
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashBase32.java
@@ -0,0 +1,74 @@
+package com.tangem.blockchain.blockchains.bitcoincash.cashaddr;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Copyright (c) 2018 Tobias Brandt
+ *
+ * Distributed under the MIT software license, see the accompanying file LICENSE
+ * or http://www.opensource.org/licenses/mit-license.php.
+ */
+public class BitcoinCashBase32 {
+
+ public static final String CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
+
+ private static final char[] CHARS = CHARSET.toCharArray();
+
+ private static Map charPositionMap;
+ static {
+ charPositionMap = new HashMap<>();
+ for (int i = 0; i < CHARS.length; i++) {
+ charPositionMap.put(CHARS[i], i);
+ }
+ if (charPositionMap.size() != 32) {
+ throw new RuntimeException("The charset must contain 32 unique characters.");
+ }
+ }
+
+ /**
+ * Encode a byte array as base32 string. This method assumes that all bytes
+ * are only from 0-31
+ *
+ * @param byteArray
+ * @return
+ */
+ public static String encode(byte[] byteArray) {
+ StringBuffer sb = new StringBuffer();
+
+ for (int i = 0; i < byteArray.length; i++) {
+ int val = (int) byteArray[i];
+
+ if (val < 0 || val > 31) {
+ throw new RuntimeException("This method assumes that all bytes are only from 0-31. Was: " + val);
+ }
+
+ sb.append(CHARS[val]);
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * Decode a base32 string back to the byte array representation
+ *
+ * @param base32String
+ * @return
+ */
+ public static byte[] decode(String base32String) {
+ byte[] bytes = new byte[base32String.length()];
+
+ char[] charArray = base32String.toCharArray();
+ for (int i = 0; i < charArray.length; i++) {
+ Integer position = charPositionMap.get(charArray[i]);
+ if (position == null) {
+ throw new RuntimeException("There seems to be an invalid char: " + charArray[i]);
+ }
+ bytes[i] = (byte) ((int) position);
+ }
+
+ return bytes;
+ }
+}
+
+
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashBitArrayConverter.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashBitArrayConverter.java
new file mode 100644
index 0000000000..ec0f980198
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/BitcoinCashBitArrayConverter.java
@@ -0,0 +1,60 @@
+package com.tangem.blockchain.blockchains.bitcoincash.cashaddr;
+/**
+ * Copyright (c) 2018 Tobias Brandt
+ *
+ * Copyright (c) 2017 Pieter Wuille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+public class BitcoinCashBitArrayConverter {
+
+ public static byte[] convertBits(byte[] bytes8Bits, int from, int to, boolean strictMode) {
+ int length = (int) (strictMode ? Math.floor((double) bytes8Bits.length * from / to)
+ : Math.ceil((double) bytes8Bits.length * from / to));
+ int mask = ((1 << to) - 1) & 0xff;
+ byte[] result = new byte[length];
+ int index = 0;
+ int accumulator = 0;
+ int bits = 0;
+ for (int i = 0; i < bytes8Bits.length; i++) {
+ byte value = bytes8Bits[i];
+ accumulator = (((accumulator & 0xff) << from) | (value & 0xff));
+ bits += from;
+ while (bits >= to) {
+ bits -= to;
+ result[index] = (byte) ((accumulator >> bits) & mask);
+ ++index;
+ }
+ }
+ if (!strictMode) {
+ if (bits > 0) {
+ result[index] = (byte) ((accumulator << (to - bits)) & mask);
+ ++index;
+ }
+ } else {
+ if (!(bits < from && ((accumulator << (to - bits)) & mask) == 0)) {
+ throw new RuntimeException("Strict mode was used but input couldn't be converted without padding");
+ }
+ }
+
+ return result;
+ }
+
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/CashAddr.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/CashAddr.java
new file mode 100644
index 0000000000..8c2cd1bfab
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoincash/cashaddr/CashAddr.java
@@ -0,0 +1,225 @@
+package com.tangem.blockchain.blockchains.bitcoincash.cashaddr;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+
+
+/**
+ * Copyright (c) 2018 Tobias Brandt
+ *
+ * Distributed under the MIT software license, see the accompanying file LICENSE
+ * or http://www.opensource.org/licenses/mit-license.php.
+ */
+
+
+public class CashAddr {
+
+ public static final String CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
+
+ private static final char[] CHARS = CHARSET.toCharArray();
+
+
+ public static final String SEPARATOR = ":";
+
+ public static final String MAIN_NET_PREFIX = "bitcoincash";
+
+ public static final String TEST_NET_PREFIX = "bchtest";
+
+ public static final String ASSUMED_DEFAULT_PREFIX = MAIN_NET_PREFIX;
+
+ private static final BigInteger[] POLYMOD_GENERATORS = new BigInteger[] { new BigInteger("98f2bc8e61", 16),
+ new BigInteger("79b76d99e2", 16), new BigInteger("f33e5fb3c4", 16), new BigInteger("ae2eabe2a8", 16),
+ new BigInteger("1e4f43e470", 16) };
+
+ private static final BigInteger POLYMOD_AND_CONSTANT = new BigInteger("07ffffffff", 16);
+
+ public static String toCashAddress(BitcoinCashAddressType addressType, byte[] hash) {
+ String prefixString = MAIN_NET_PREFIX;
+ byte[] prefixBytes = getPrefixBytes(prefixString);
+ byte[] payloadBytes = concatenateByteArrays(new byte[] { addressType.getVersionByte() }, hash);
+ payloadBytes = convertBits(payloadBytes, 8, 5, false);
+ byte[] allChecksumInput = concatenateByteArrays(
+ concatenateByteArrays(concatenateByteArrays(prefixBytes, new byte[] { 0 }), payloadBytes),
+ new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });
+ byte[] checksumBytes = calculateChecksumBytesPolymod(allChecksumInput);
+ checksumBytes = convertBits(checksumBytes, 8, 5, true);
+ String cashAddress = BitcoinCashBase32.encode(concatenateByteArrays(payloadBytes, checksumBytes));
+ return prefixString + SEPARATOR + cashAddress;
+ }
+
+ public static BitcoinCashAddressDecodedParts decodeCashAddress(String bitcoinCashAddress) {
+ if (!isValidCashAddress(bitcoinCashAddress)) {
+ throw new RuntimeException("Address wasn't valid: " + bitcoinCashAddress);
+ }
+
+ BitcoinCashAddressDecodedParts decoded = new BitcoinCashAddressDecodedParts();
+ String[] addressParts = bitcoinCashAddress.split(SEPARATOR);
+ if (addressParts.length == 2) {
+ decoded.setPrefix(addressParts[0]);
+ } else {
+ decoded.setPrefix(MAIN_NET_PREFIX);
+ }
+
+ byte[] addressData = BitcoinCashBase32.decode(addressParts[addressParts.length - 1]);
+ addressData = Arrays.copyOfRange(addressData, 0, addressData.length - 8);
+ addressData = BitcoinCashBitArrayConverter.convertBits(addressData, 5, 8, true);
+ byte versionByte = addressData[0];
+ byte[] hash = Arrays.copyOfRange(addressData, 1, addressData.length);
+
+ decoded.setAddressType(getAddressTypeFromVersionByte(versionByte));
+ decoded.setHash(hash);
+
+ return decoded;
+ }
+
+ private static BitcoinCashAddressType getAddressTypeFromVersionByte(byte versionByte) {
+ for (BitcoinCashAddressType addressType : BitcoinCashAddressType.values()) {
+ if (addressType.getVersionByte() == versionByte) {
+ return addressType;
+ }
+ }
+
+ throw new RuntimeException("Unknown version byte: " + versionByte);
+ }
+
+
+
+ public static boolean isValidCashAddress(String bitcoinCashAddress ) {
+ try {
+ if (!isSingleCase(bitcoinCashAddress))
+ return false;
+
+ bitcoinCashAddress = bitcoinCashAddress.toLowerCase();
+ String prefix;
+
+ if (bitcoinCashAddress.contains(SEPARATOR)) {
+ String[] split = bitcoinCashAddress.split(SEPARATOR);
+ prefix = split[0];
+ if (!prefix.equals(MAIN_NET_PREFIX)) {return false;} //for now we use main net only
+ bitcoinCashAddress = split[1];
+ } else {
+ prefix = MAIN_NET_PREFIX;
+ }
+ if (!bitcoinCashAddress.startsWith("q")) {return false;} //for now we use P2PKH addresses only
+
+ byte[] checksumData = concatenateByteArrays(
+ concatenateByteArrays(getPrefixBytes(prefix ), new byte[] { 0x00 }),
+ BitcoinCashBase32.decode(bitcoinCashAddress));
+
+ byte[] calculateChecksumBytesPolymod = calculateChecksumBytesPolymod(checksumData);
+ return new BigInteger(calculateChecksumBytesPolymod).compareTo(BigInteger.ZERO) == 0;
+ } catch (RuntimeException re) {
+ return false;
+ }
+ }
+
+
+
+ private static boolean isSingleCase(String bitcoinCashAddress) {
+ if (bitcoinCashAddress.equals(bitcoinCashAddress.toLowerCase())) {
+ return true;
+ }
+ if (bitcoinCashAddress.equals(bitcoinCashAddress.toUpperCase())) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param checksumInput
+ * @return Returns a 40 bits checksum in form of 5 8-bit arrays. This still has
+ * to me mapped to 5-bit array representation
+ */
+ private static byte[] calculateChecksumBytesPolymod(byte[] checksumInput) {
+ BigInteger c = BigInteger.ONE;
+
+ for (int i = 0; i < checksumInput.length; i++) {
+ byte c0 = c.shiftRight(35).byteValue();
+ c = c.and(POLYMOD_AND_CONSTANT).shiftLeft(5)
+ .xor(new BigInteger(String.format("%02x", checksumInput[i]), 16));
+
+ if ((c0 & 0x01) != 0)
+ c = c.xor(POLYMOD_GENERATORS[0]);
+ if ((c0 & 0x02) != 0)
+ c = c.xor(POLYMOD_GENERATORS[1]);
+ if ((c0 & 0x04) != 0)
+ c = c.xor(POLYMOD_GENERATORS[2]);
+ if ((c0 & 0x08) != 0)
+ c = c.xor(POLYMOD_GENERATORS[3]);
+ if ((c0 & 0x10) != 0)
+ c = c.xor(POLYMOD_GENERATORS[4]);
+ }
+
+ byte[] checksum = c.xor(BigInteger.ONE).toByteArray();
+ if (checksum.length == 5) {
+ return checksum;
+ } else {
+ byte[] newChecksumArray = new byte[5];
+
+ System.arraycopy(checksum, Math.max(0, checksum.length - 5), newChecksumArray,
+ Math.max(0, 5 - checksum.length), Math.min(5, checksum.length));
+
+ return newChecksumArray;
+ }
+
+ }
+
+ private static byte[] getPrefixBytes(String prefixString ) {
+ byte[] prefixBytes = new byte[prefixString.length()];
+
+ char[] charArray = prefixString.toCharArray();
+ for (int i = 0; i < charArray.length; i++) {
+ prefixBytes[i] = (byte) (charArray[i] & 0x1f);
+ }
+
+ return prefixBytes;
+ }
+
+ private static byte[] concatenateByteArrays(byte[] first, byte[] second) {
+ byte[] concatenatedBytes = new byte[first.length + second.length];
+
+ System.arraycopy(first, 0, concatenatedBytes, 0, first.length);
+ System.arraycopy(second, 0, concatenatedBytes, first.length, second.length);
+
+ return concatenatedBytes;
+ }
+
+ private static byte[] convertBits(byte[] bytes8Bits, int from, int to, boolean strictMode) {
+ //Copyright (c) 2017 Pieter Wuille
+
+ int length = (int) (strictMode ? Math.floor((double) bytes8Bits.length * from / to)
+ : Math.ceil((double) bytes8Bits.length * from / to));
+ int mask = ((1 << to) - 1) & 0xff;
+ byte[] result = new byte[length];
+ int index = 0;
+ int accumulator = 0;
+ int bits = 0;
+ for (int i = 0; i < bytes8Bits.length; i++) {
+ byte value = bytes8Bits[i];
+ accumulator = (((accumulator & 0xff) << from) | (value & 0xff));
+ bits += from;
+ while (bits >= to) {
+ bits -= to;
+ result[index] = (byte) ((accumulator >> bits) & mask);
+ ++index;
+ }
+ }
+ if (!strictMode) {
+ if (bits > 0) {
+ result[index] = (byte) ((accumulator << (to - bits)) & mask);
+ ++index;
+ }
+ } else {
+ if (!(bits < from && ((accumulator << (to - bits)) & mask) == 0)) {
+ throw new RuntimeException("Strict mode was used but input couldn't be converted without padding");
+ }
+ }
+
+ return result;
+ }
+
+
+
+
+}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoAddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoAddressService.kt
new file mode 100644
index 0000000000..ec72bc4b69
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoAddressService.kt
@@ -0,0 +1,121 @@
+package com.tangem.blockchain.blockchains.cardano
+
+import co.nstant.`in`.cbor.CborBuilder
+import co.nstant.`in`.cbor.CborDecoder
+import co.nstant.`in`.cbor.CborEncoder
+import co.nstant.`in`.cbor.model.Array
+import co.nstant.`in`.cbor.model.ByteString
+import co.nstant.`in`.cbor.model.UnsignedInteger
+import com.tangem.blockchain.blockchains.cardano.crypto.Blake2b
+import com.tangem.blockchain.common.AddressService
+import com.tangem.blockchain.extensions.decodeBase58
+import com.tangem.blockchain.extensions.encodeBase58
+import org.spongycastle.crypto.util.DigestFactory
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import java.util.zip.CRC32
+
+class CardanoAddressService : AddressService {
+ override fun makeAddress(walletPublicKey: ByteArray): String {
+ val extendedPublicKey = extendPublicKey(walletPublicKey)
+
+ val pubKeyWithAttributes = getPubKeyWithAttributes(extendedPublicKey)
+ val sha3Hash = getSha3Hash(pubKeyWithAttributes)
+
+ val blake2b = Blake2b.Digest.newInstance(28)
+ val blakeHash = blake2b.digest(sha3Hash)
+
+ val hashWithAttributes = getHashWithAttributes(blakeHash)
+
+ return getAddress(hashWithAttributes)
+ }
+
+ override fun validate(address: String): Boolean {
+ val decoded = address.decodeBase58() ?: return false
+
+ return try {
+ val bais = ByteArrayInputStream(decoded)
+ val addressList =
+ (CborDecoder(bais).decode()[0] as Array).dataItems
+ val addressItemBytes = (addressList[0] as ByteString).bytes
+ val checksum = (addressList[1] as UnsignedInteger).value.toLong()
+
+ val crc32 = CRC32()
+ crc32.update(addressItemBytes)
+ val calculatedChecksum = crc32.value
+
+ checksum == calculatedChecksum
+ } catch (e: Exception) {
+ false
+ }
+ }
+
+ private fun getPubKeyWithAttributes(extendedPublicKey: ByteArray): ByteArray {
+ val pubKeyWithAttributes = ByteArrayOutputStream()
+ CborEncoder(pubKeyWithAttributes).encode(CborBuilder()
+ .addArray()
+ .add(0)
+ .addArray()
+ .add(0)
+ .add(extendedPublicKey)
+ .end()
+ .addMap()
+ .end()
+ .end()
+ .build())
+ return pubKeyWithAttributes.toByteArray()
+ }
+
+ private fun getSha3Hash(pubKeyWithAttributes: ByteArray): ByteArray {
+ val sha3Digest = DigestFactory.createSHA3_256()
+ sha3Digest.update(pubKeyWithAttributes, 0, pubKeyWithAttributes.size)
+ val sha3Hash = ByteArray(32)
+ sha3Digest.doFinal(sha3Hash, 0)
+ return sha3Hash
+ }
+
+ private fun getHashWithAttributes(blakeHash: ByteArray): ByteArray {
+ val hashWithAttributes = ByteArrayOutputStream()
+ CborEncoder(hashWithAttributes).encode(CborBuilder()
+ .addArray()
+ .add(blakeHash)
+ .addMap() //additional attributes
+ .end()
+ .add(0) //address type
+ .end()
+ .build())
+ return hashWithAttributes.toByteArray()
+ }
+
+ private fun getAddress(hashWithAttributes: ByteArray): String {
+ val checksum = getCheckSum(hashWithAttributes)
+
+ val addressItem = CborBuilder().add(hashWithAttributes).build().get(0)
+ addressItem.setTag(24)
+
+ //addr + checksum
+ val address = ByteArrayOutputStream()
+ CborEncoder(address).encode(CborBuilder()
+ .addArray()
+ .add(addressItem)
+ .add(checksum)
+ .end()
+ .build())
+
+ return address.toByteArray().encodeBase58()
+ }
+
+ private fun getCheckSum(hashWithAttributes: ByteArray): Long {
+ val crc32 = CRC32()
+ crc32.update(hashWithAttributes)
+ return crc32.value
+ }
+
+ companion object {
+ fun extendPublicKey(publicKey: ByteArray): ByteArray {
+ val zeroBytes = ByteArray(32)
+ zeroBytes.fill(0)
+ return publicKey + zeroBytes
+ }
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoTransactionBuilder.kt
similarity index 91%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoTransactionBuilder.kt
index a251e0068c..eb3d2ee289 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoTransactionBuilder.kt
@@ -1,19 +1,20 @@
-package com.tangem.blockchain.cardano
+package com.tangem.blockchain.blockchains.cardano
import co.nstant.`in`.cbor.CborBuilder
import co.nstant.`in`.cbor.CborDecoder
import co.nstant.`in`.cbor.CborEncoder
import co.nstant.`in`.cbor.builder.ArrayBuilder
-import com.tangem.blockchain.cardano.crypto.Blake2b
+import com.tangem.blockchain.blockchains.cardano.crypto.Blake2b
import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.extensions.decodeBase58
+import com.tangem.blockchain.extensions.decodeBase58
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.math.BigDecimal
-class CardanoTransactionBuilder() {
+class CardanoTransactionBuilder(private val walletPublicKey: ByteArray) {
+
var unspentOutputs: List = listOf()
- var transactionBody: ByteArray = ByteArray(0)
+ private var transactionBody: ByteArray = ByteArray(0)
fun buildToSign(transactionData: TransactionData): ByteArray {
val transactionBuilder = CborBuilder()
@@ -43,8 +44,8 @@ class CardanoTransactionBuilder() {
return prefixedHashBaos.toByteArray()
}
- fun buildToSend(signature: ByteArray, publicKey: ByteArray): ByteArray {
- val extendedPublicKey = CardanoAddressFactory.extendPublicKey(publicKey)
+ fun buildToSend(signature: ByteArray): ByteArray {
+ val extendedPublicKey = CardanoAddressService.extendPublicKey(walletPublicKey)
//pubkey + signature
val witnessBodyBaos = ByteArrayOutputStream()
@@ -144,7 +145,7 @@ class CardanoTransactionBuilder() {
return fullAmount - (amount + fee)
}
- fun getEstimateSize(transactionData: TransactionData, walletPublicKey: ByteArray): Int {
+ fun getEstimateSize(transactionData: TransactionData): Int {
val dummyFeeValue = BigDecimal.valueOf(0.1)
val dummyFee = transactionData.amount.copy(value = dummyFeeValue)
@@ -156,7 +157,7 @@ class CardanoTransactionBuilder() {
fee = dummyFee
)
buildToSign(dummyTransactionData)
- return buildToSend(ByteArray(64), walletPublicKey).size
+ return buildToSend(ByteArray(64)).size
}
companion object {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoWalletManager.kt
similarity index 56%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoWalletManager.kt
index 86b5f25a51..d63bb787ed 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoWalletManager.kt
@@ -1,30 +1,26 @@
-package com.tangem.blockchain.cardano
+package com.tangem.blockchain.blockchains.cardano
import android.util.Log
-import com.tangem.blockchain.cardano.network.CardanoAddressResponse
-import com.tangem.blockchain.cardano.network.CardanoNetworkManager
+import com.tangem.blockchain.blockchains.cardano.network.CardanoAddressResponse
+import com.tangem.blockchain.blockchains.cardano.network.CardanoNetworkManager
import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.encodeBase64NoWrap
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.encodeBase64NoWrap
import com.tangem.common.CompletionResult
+import java.math.RoundingMode
class CardanoWalletManager(
- private val cardId: String,
- private val walletPublicKey: ByteArray,
- override var wallet: CurrencyWallet
-) : WalletManager,
- TransactionSender,
- FeeProvider {
+ cardId: String,
+ wallet: Wallet,
+ private val transactionBuilder: CardanoTransactionBuilder,
+ private val networkManager: CardanoNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
- override val blockchain = Blockchain.Cardano
- private val address = blockchain.makeAddress(walletPublicKey)
- private val transactionBuilder = CardanoTransactionBuilder()
- private val networkManager = CardanoNetworkManager()
+ private val blockchain = wallet.blockchain
override suspend fun update() {
- val response = networkManager.getInfo(address)
+ val response = networkManager.getInfo(wallet.address)
when (response) {
is Result.Success -> updateWallet(response.data)
is Result.Failure -> updateError(response.error)
@@ -33,8 +29,8 @@ class CardanoWalletManager(
private fun updateWallet(response: CardanoAddressResponse) {
Log.d(this::class.java.simpleName, "Balance is ${response.balance.toString()}")
- wallet.balances[AmountType.Coin]?.value =
- response.balance.toBigDecimal().movePointLeft(blockchain.decimals.toInt())
+ wallet.amounts[AmountType.Coin]?.value =
+ response.balance.toBigDecimal().movePointLeft(blockchain.decimals())
transactionBuilder.unspentOutputs = response.unspentOutputs
}
@@ -48,7 +44,7 @@ class CardanoWalletManager(
when (val signerResponse = signer.sign(arrayOf(transactionHash), cardId)) {
is CompletionResult.Success -> {
- val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, walletPublicKey)
+ val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature)
return networkManager.sendTransaction(transactionToSend.encodeBase64NoWrap())
}
is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
@@ -59,9 +55,9 @@ class CardanoWalletManager(
val a = 0.155381
val b = 0.000043946
val size = transactionBuilder.getEstimateSize(
- TransactionData(amount, null, address, destination), walletPublicKey
+ TransactionData(amount, null, wallet.address, destination)
)
- val fee = (a + b * size).toBigDecimal()
- return Result.Success(listOf(Amount(blockchain.currency, fee, address, blockchain.decimals)))
+ val fee = (a + b * size).toBigDecimal().setScale(blockchain.decimals(), RoundingMode.UP)
+ return Result.Success(listOf(Amount(amount, fee)))
}
}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/crypto/Blake2b.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/crypto/Blake2b.java
similarity index 98%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/crypto/Blake2b.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/crypto/Blake2b.java
index 01358597fd..70059e3e6a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/crypto/Blake2b.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/crypto/Blake2b.java
@@ -17,7 +17,7 @@
this software. If not, see .
*/
-package com.tangem.blockchain.cardano.crypto;
+package com.tangem.blockchain.blockchains.cardano.crypto;
import java.io.PrintStream;
import java.io.Serializable;
@@ -25,14 +25,14 @@ import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Arrays;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.assertFail;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.exclusiveLowerBound;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.inclusiveLowerBound;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.inclusiveUpperBound;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.readInt;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.readLong;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.writeInt;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.writeLong;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.assertFail;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.exclusiveLowerBound;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.inclusiveLowerBound;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.inclusiveUpperBound;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.readInt;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.readLong;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.writeInt;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.writeLong;
/** */
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/CardanoNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/CardanoNetworkManager.kt
similarity index 77%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/CardanoNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/CardanoNetworkManager.kt
index 1852c6b994..907dd1be92 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/CardanoNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/CardanoNetworkManager.kt
@@ -1,13 +1,13 @@
-package com.tangem.blockchain.cardano.network
+package com.tangem.blockchain.blockchains.cardano.network
-import com.tangem.blockchain.cardano.UnspentOutput
-import com.tangem.blockchain.cardano.network.adalite.AdaliteProvider
-import com.tangem.blockchain.cardano.network.api.AdaliteApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_ADALITE
-import com.tangem.blockchain.common.network.API_ADALITE_RESERVE
-import com.tangem.blockchain.common.network.createRetrofitInstance
+import com.tangem.blockchain.blockchains.cardano.UnspentOutput
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteProvider
+import com.tangem.blockchain.blockchains.cardano.network.api.AdaliteApi
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_ADALITE
+import com.tangem.blockchain.network.API_ADALITE_RESERVE
+import com.tangem.blockchain.network.createRetrofitInstance
import retrofit2.HttpException
import java.io.IOException
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteApi.kt
new file mode 100644
index 0000000000..523a2caab7
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteApi.kt
@@ -0,0 +1,19 @@
+package com.tangem.blockchain.blockchains.cardano.network.api
+
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteAddress
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteSendBody
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteUnspents
+import retrofit2.http.*
+
+interface AdaliteApi {
+ @GET("/api/addresses/summary/{address}")
+ suspend fun getAddress(@Path("address") address: String): AdaliteAddress
+
+ @Headers("Content-Type: application/json")
+ @POST("/api/bulk/addresses/utxo")
+ suspend fun getUnspents(@Body addresses: List): AdaliteUnspents
+
+ @Headers("Content-Type: application/json")
+ @POST("/api/v2/txs/signed")
+ suspend fun sendTransaction(@Body adaliteBody: AdaliteSendBody): String // List?
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteProvider.kt
similarity index 63%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteProvider.kt
index ec05798ced..972e500ced 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteProvider.kt
@@ -1,11 +1,13 @@
-package com.tangem.blockchain.cardano.network.adalite
+package com.tangem.blockchain.blockchains.cardano.network.adalite
-import com.tangem.blockchain.cardano.network.CardanoAddressResponse
-import com.tangem.blockchain.cardano.UnspentOutput
-import com.tangem.blockchain.cardano.network.api.AdaliteApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
+import com.squareup.moshi.Json
+import com.tangem.blockchain.blockchains.cardano.UnspentOutput
+import com.tangem.blockchain.blockchains.cardano.network.CardanoAddressResponse
+import com.tangem.blockchain.blockchains.cardano.network.api.AdaliteApi
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
+import com.tangem.common.extensions.hexToBytes
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
@@ -15,7 +17,7 @@ class AdaliteProvider(private val api: AdaliteApi) {
return try {
coroutineScope {
val addressDeferred = retryIO { async { api.getAddress(address) } }
- val unspentsDeferred = retryIO { async { api.getUnspents(address) } }
+ val unspentsDeferred = retryIO { async { api.getUnspents(listOf(address)) } }
val addressData = addressDeferred.await()
val unspents = unspentsDeferred.await()
@@ -24,7 +26,7 @@ class AdaliteProvider(private val api: AdaliteApi) {
UnspentOutput(
it.amountData!!.amount!!,
it.outputIndex!!.toLong(),
- it.hash!!.toByteArray()
+ it.hash!!.hexToBytes()
)
}
@@ -42,7 +44,7 @@ class AdaliteProvider(private val api: AdaliteApi) {
suspend fun sendTransaction(transaction: String): SimpleResult {
return try {
- retryIO { api.sendTransaction(AdaliteSendBody(transaction)) }
+ val response = retryIO { api.sendTransaction(AdaliteSendBody(transaction)) }
SimpleResult.Success
} catch (exception: Exception) {
SimpleResult.Failure(exception)
@@ -50,4 +52,7 @@ class AdaliteProvider(private val api: AdaliteApi) {
}
}
-data class AdaliteSendBody(val signedTransaction: String)
\ No newline at end of file
+data class AdaliteSendBody(
+ @Json(name = "signedTx")
+ val signedTransaction: String
+)
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteResponse.kt
similarity index 91%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteResponse.kt
index 4bc1f86894..3aee35cf62 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteResponse.kt
@@ -1,11 +1,11 @@
-package com.tangem.blockchain.cardano.network.adalite
+package com.tangem.blockchain.blockchains.cardano.network.adalite
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class AdaliteAddress(
- @Json(name = "final_balance")
+ @Json(name = "Right")
var data: AdaliteAddressData? = null
)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressService.kt
new file mode 100644
index 0000000000..50b9ab2bd0
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressService.kt
@@ -0,0 +1,15 @@
+package com.tangem.blockchain.blockchains.ethereum
+
+import com.tangem.blockchain.common.AddressService
+import org.kethereum.crypto.toAddress
+import org.kethereum.erc55.hasValidERC55ChecksumOrNoChecksum
+import org.kethereum.erc55.withERC55Checksum
+import org.kethereum.model.Address
+import org.kethereum.model.PublicKey
+
+class EthereumAddressService : AddressService {
+ override fun makeAddress(walletPublicKey: ByteArray): String =
+ PublicKey(walletPublicKey.sliceArray(1..64)).toAddress().withERC55Checksum().hex
+
+ override fun validate(address: String): Boolean = Address(address).hasValidERC55ChecksumOrNoChecksum()
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumTransactionBuilder.kt
new file mode 100644
index 0000000000..ead68d974b
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumTransactionBuilder.kt
@@ -0,0 +1,115 @@
+package com.tangem.blockchain.blockchains.ethereum
+
+import com.tangem.blockchain.common.Amount
+import com.tangem.blockchain.common.AmountType
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.common.TransactionData
+import com.tangem.common.extensions.hexToBytes
+import org.kethereum.crypto.api.ec.ECDSASignature
+import org.kethereum.crypto.determineRecId
+import org.kethereum.crypto.impl.ec.canonicalise
+import org.kethereum.extensions.toBytesPadded
+import org.kethereum.extensions.toFixedLengthByteArray
+import org.kethereum.extensions.transactions.encodeRLP
+import org.kethereum.extensions.transactions.tokenTransferSignature
+import org.kethereum.keccakshortcut.keccak
+import org.kethereum.model.*
+import java.math.BigDecimal
+import java.math.BigInteger
+
+class EthereumTransactionBuilder(private val walletPublicKey: ByteArray, blockchain: Blockchain) {
+
+ private val chainId = when (blockchain) {
+ Blockchain.Ethereum -> Chain.Mainnet.id
+ Blockchain.RSK -> Chain.RskMainnet.id
+ else -> throw Exception("${blockchain.fullName} blockchain is not supported by EthereumTransactionBuilder")
+ }
+
+ fun buildToSign(transactionData: TransactionData, nonce: BigInteger?): TransactionToSign? {
+
+ val amount: BigDecimal = transactionData.amount.value ?: return null
+ val transactionFee: BigDecimal = transactionData.fee?.value ?: return null
+
+ val fee = transactionFee.movePointRight(transactionData.fee.decimals).toBigInteger()
+ val gasLimit = getGasLimit(transactionData.amount).value.toBigInteger()
+ val bigIntegerAmount = amount.movePointRight(transactionData.amount.decimals).toBigInteger()
+
+ val to: Address
+ val value: BigInteger
+ val input: ByteArray //data for smart contract
+
+ if (transactionData.amount.type == AmountType.Coin) { //coin transfer
+ to = Address(transactionData.destinationAddress)
+ value = bigIntegerAmount
+ input = ByteArray(0)
+ } else { //token transfer
+ to = Address(transactionData.contractAddress
+ ?: throw Exception("Contract address is not specified!"))
+ value = BigInteger.ZERO
+ input = createErc20TransferData(transactionData.destinationAddress, bigIntegerAmount)
+ }
+
+ val transaction = createTransactionWithDefaults(
+ from = Address(transactionData.sourceAddress),
+ to = to,
+ value = value,
+ gasPrice = fee.divide(gasLimit),
+ gasLimit = gasLimit,
+ nonce = nonce,
+ input = input
+// chain = ChainId(chainId.toLong())
+ )
+ val hash = transaction.encodeRLP(SignatureData(v = chainId.toBigInteger())).keccak()
+ return TransactionToSign(transaction, listOf(hash))
+ }
+
+ fun buildToSend(signature: ByteArray, transactionToSign: TransactionToSign): ByteArray {
+ val r = BigInteger(1, signature.copyOfRange(0, 32))
+ val s = BigInteger(1, signature.copyOfRange(32, 64))
+
+ val ecdsaSignature = ECDSASignature(r, s).canonicalise()
+
+ val recId = ecdsaSignature.determineRecId(transactionToSign.hashes[0], PublicKey(walletPublicKey.sliceArray(1..64)))
+ val v = (recId + 27 + 8 + (chainId * 2)).toBigInteger()
+ val signatureData = SignatureData(ecdsaSignature.r, ecdsaSignature.s, v)
+
+ return transactionToSign.transaction.encodeRLP(signatureData)
+ }
+
+ private fun createErc20TransferData(recepient: String, amount: BigInteger): ByteArray {
+ return tokenTransferSignature.toByteArray() +
+ recepient.substring(2).hexToBytes().toFixedLengthByteArray(32) +
+ amount.toBytesPadded(32)
+ }
+}
+
+class TransactionToSign(val transaction: Transaction, val hashes: List)
+
+enum class GasLimit(val value: Long) {
+ Default(21000),
+ Token(60000),
+ High(300000)
+}
+
+internal fun getGasLimit(amount: Amount): GasLimit {
+ return when (amount.currencySymbol) {
+ Blockchain.Ethereum.currency -> GasLimit.Default
+ "DGX" -> GasLimit.High
+ "CGT" -> GasLimit.High
+ else -> GasLimit.Token
+ }
+}
+
+enum class Chain(val id: Int) {
+ Mainnet(1),
+ Morden(2),
+ Ropsten(3),
+ Rinkeby(4),
+ RskMainnet(30),
+ RskTestnet(31),
+ Kovan(42),
+ EthereumClassicMainnet(61),
+ EthereumClassicTestnet(62),
+ Geth_private_chains(1337),
+ MaticTestnet(8995);
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumWalletManager.kt
new file mode 100644
index 0000000000..5ac19d6370
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumWalletManager.kt
@@ -0,0 +1,74 @@
+package com.tangem.blockchain.blockchains.ethereum
+
+import android.util.Log
+import com.tangem.blockchain.blockchains.ethereum.network.EthereumNetworkManager
+import com.tangem.blockchain.blockchains.ethereum.network.EthereumInfoResponse
+import com.tangem.blockchain.common.*
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.common.CompletionResult
+import com.tangem.common.extensions.toHexString
+import java.math.BigDecimal
+
+class EthereumWalletManager(
+ cardId: String,
+ wallet: Wallet,
+ private val transactionBuilder: EthereumTransactionBuilder,
+ private val networkManager: EthereumNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
+
+ private val blockchain = wallet.blockchain
+
+ private var pendingTxCount = -1L
+ private var txCount = -1L
+
+ override suspend fun update() {
+
+ val result = networkManager.getInfo(wallet.address, wallet.amounts[AmountType.Token]?.address)
+ when (result) {
+ is Result.Failure -> updateError(result.error)
+ is Result.Success -> updateWallet(result.data)
+ }
+ }
+
+ private fun updateWallet(data: EthereumInfoResponse) {
+ wallet.amounts[AmountType.Coin]?.value = data.balance
+ wallet.amounts[AmountType.Token]?.value = data.tokenBalance
+ txCount = data.txCount
+ pendingTxCount = data.pendingTxCount
+ if (txCount == pendingTxCount) {
+ wallet.transactions.forEach { it.status = TransactionStatus.Confirmed }
+ } else if (wallet.transactions.isEmpty()) {
+ wallet.addIncomingTransaction()
+ }
+ }
+
+ private fun updateError(error: Throwable?) {
+ Log.e(this::class.java.simpleName, error?.message ?: "")
+ if (error != null) throw error
+ }
+
+ override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult {
+ val transactionToSign = transactionBuilder.buildToSign(transactionData, txCount.toBigInteger())
+ ?: return SimpleResult.Failure(Exception("Not enough data"))
+ when (val signerResponse = signer.sign(transactionToSign.hashes.toTypedArray(), cardId)) {
+ is CompletionResult.Success -> {
+ val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, transactionToSign)
+ return networkManager.sendTransaction(String.format("0x%s", transactionToSend.toHexString()))
+ }
+ is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
+ }
+ }
+
+ override suspend fun getFee(amount: Amount, destination: String): Result> {
+ val result = networkManager.getFee(getGasLimit(amount).value)
+ when (result) {
+ is Result.Success -> {
+ val feeValues: List = result.data
+ return Result.Success(
+ feeValues.map { feeValue -> Amount(wallet.amounts[AmountType.Coin]!!, feeValue) })
+ }
+ is Result.Failure -> return result
+ }
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumApi.kt
similarity index 68%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumApi.kt
index df84fae5ad..0b0030a779 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumApi.kt
@@ -1,18 +1,19 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
import com.squareup.moshi.JsonClass
import retrofit2.http.Body
import retrofit2.http.Headers
import retrofit2.http.POST
+import retrofit2.http.Path
-interface InfuraApi {
+interface EthereumApi {
@Headers("Content-Type: application/json")
- @POST("v3/613a0b14833145968b1f656240c7d245")
- suspend fun postToInfura(@Body body: InfuraBody?): InfuraResponse
+ @POST("{apiKey}")
+ suspend fun post(@Body body: EthereumBody?, @Path("apiKey") apiKey: String): EthereumResponse
}
@JsonClass(generateAdapter = true)
-data class InfuraBody(
+data class EthereumBody(
val jsonrpc: String = "2.0",
val id: Int = 67,
val method: String? = null,
@@ -21,7 +22,7 @@ data class InfuraBody(
data class EthCallParams(private val data: String, private val to: String)
-enum class InfuraMethod(val value: String) {
+enum class EthereumMethod(val value: String) {
GET_BALANCE("eth_getBalance"),
GET_TRANSACTION_COUNT("eth_getTransactionCount"),
GET_PENDING_COUNT("eth_getPendingCount"),
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/EthereumNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumNetworkManager.kt
similarity index 62%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/EthereumNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumNetworkManager.kt
index b7318ba032..0fd3078d40 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/EthereumNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumNetworkManager.kt
@@ -1,26 +1,40 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
import com.tangem.blockchain.common.Blockchain
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
-import com.tangem.blockchain.common.network.API_INFURA
-import com.tangem.blockchain.common.network.createRetrofitInstance
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
+import com.tangem.blockchain.network.API_INFURA
+import com.tangem.blockchain.network.API_RSK
+import com.tangem.blockchain.network.createRetrofitInstance
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import org.kethereum.ETH_IN_WEI
import java.math.BigDecimal
import java.math.BigInteger
+import java.math.RoundingMode
-class EthereumNetworkManager {
+class EthereumNetworkManager(blockchain: Blockchain) {
+ private val infuraPath = "v3/"
- private val api: InfuraApi by lazy {
- createRetrofitInstance(API_INFURA).create(InfuraApi::class.java)
+ private val api: EthereumApi by lazy {
+ val baseUrl = when (blockchain) {
+ Blockchain.Ethereum -> API_INFURA + infuraPath
+ Blockchain.RSK -> API_RSK
+ else -> throw Exception("${blockchain.fullName} blockchain is not supported by EthereumNetworkManager")
+ }
+ createRetrofitInstance(baseUrl).create(EthereumApi::class.java)
}
- private val provider: InfuraProvider by lazy { InfuraProvider(api) }
+ private val apiKey = when (blockchain) {
+ Blockchain.Ethereum -> INFURA_API_KEY
+ Blockchain.RSK -> ""
+ else -> throw Exception("${blockchain.fullName} blockchain is not supported by EthereumNetworkManager")
+ }
+
+ private val provider: EthereumProvider by lazy { EthereumProvider(api, apiKey) }
suspend fun sendTransaction(transaction: String): SimpleResult {
return try {
@@ -45,17 +59,17 @@ class EthereumNetworkManager {
}
}
- suspend fun getInfo(address: String, contractAddress: String? = null): Result {
+ suspend fun getInfo(address: String, contractAddress: String? = null): Result {
return try {
coroutineScope {
val balanceResponse = retryIO { async { provider.getBalance(address) } }
val txCountResponse = retryIO { async { provider.getTxCount(address) } }
val pendingTxCountResponse = retryIO { async { provider.getPendingTxCount(address) } }
- var tokenBalanceResponse: Deferred? = null
+ var tokenBalanceResponse: Deferred? = null
if (contractAddress != null) {
tokenBalanceResponse = retryIO { async { provider.getTokenBalance(address, contractAddress) } }
}
- Result.Success(EthereumResponse(
+ Result.Success(EthereumInfoResponse(
balanceResponse.await().result!!.parseAmount(),
tokenBalanceResponse?.await()?.result?.parseAmount(),
txCountResponse.await().result?.responseToNumber()?.toLong() ?: 0,
@@ -70,8 +84,8 @@ class EthereumNetworkManager {
private fun String.parseFee(gasLimit: Long): List {
val gasPrice = this.responseToNumber().toBigDecimal()
val minFee = gasPrice.multiply(gasLimit.toBigDecimal())
- val normalFee = minFee.multiply(BigDecimal(1.2))
- val priorityFee = minFee.multiply(BigDecimal(1.5))
+ val normalFee = minFee.multiply(BigDecimal(1.2)).setScale(0, RoundingMode.HALF_UP)
+ val priorityFee = minFee.multiply(BigDecimal(1.5)).setScale(0, RoundingMode.HALF_UP)
return listOf(
minFee.convertFeeToEth(),
normalFee.convertFeeToEth(),
@@ -86,14 +100,16 @@ class EthereumNetworkManager {
private fun BigDecimal.convertFeeToEth(): BigDecimal {
return this.divide(ETH_IN_WEI.toBigDecimal())
- .setScale(12, Blockchain.Ethereum.roundingMode()).stripTrailingZeros()
+ .setScale(12, BigDecimal.ROUND_DOWN).stripTrailingZeros()
}
}
-data class EthereumResponse(
+data class EthereumInfoResponse(
val balance: BigDecimal,
val tokenBalance: BigDecimal?,
val txCount: Long,
val pendingTxCount: Long
-)
\ No newline at end of file
+)
+
+private const val INFURA_API_KEY = "613a0b14833145968b1f656240c7d245"
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumProvider.kt
new file mode 100644
index 0000000000..c320f566b6
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumProvider.kt
@@ -0,0 +1,39 @@
+package com.tangem.blockchain.blockchains.ethereum.network
+
+class EthereumProvider(private val api: EthereumApi, private val apiKey: String) {
+ suspend fun getBalance(address: String) = api.post(createEthereumBody(EthereumMethod.GET_BALANCE, address), apiKey)
+ suspend fun getTokenBalance(address: String, contractAddress: String) = api.post(createEthereumBody(EthereumMethod.CALL, address, contractAddress), apiKey)
+ suspend fun getTxCount(address: String) = api.post(createEthereumBody(EthereumMethod.GET_TRANSACTION_COUNT, address), apiKey)
+ suspend fun getPendingTxCount(address: String) = api.post(createEthereumBody(EthereumMethod.GET_PENDING_COUNT, address), apiKey)
+ suspend fun getGasPrice() = api.post(createEthereumBody(EthereumMethod.GAS_PRICE), apiKey)
+ suspend fun sendTransaction(transaction: String) = api.post(createEthereumBody(EthereumMethod.SEND_RAW_TRANSACTION, transaction = transaction), apiKey)
+}
+
+private fun createEthereumBody(
+ method: EthereumMethod,
+ address: String? = null,
+ contractAddress: String? = null,
+ transaction: String? = null): EthereumBody {
+
+ return when (method) {
+ EthereumMethod.GET_BALANCE ->
+ EthereumBody(method = EthereumMethod.GET_BALANCE.value, params = listOf(address ?: "", "latest"))
+ EthereumMethod.GET_TRANSACTION_COUNT ->
+ EthereumBody(method = EthereumMethod.GET_TRANSACTION_COUNT.value, params = listOf(address ?: "", "latest"))
+ EthereumMethod.GET_PENDING_COUNT ->
+ EthereumBody(method = EthereumMethod.GET_TRANSACTION_COUNT.value, params = listOf(address ?: "", "pending"))
+ EthereumMethod.GAS_PRICE ->
+ EthereumBody(method = EthereumMethod.GAS_PRICE.value)
+ EthereumMethod.SEND_RAW_TRANSACTION ->
+ EthereumBody(method = EthereumMethod.SEND_RAW_TRANSACTION.value, params = listOf(transaction ?: ""))
+ EthereumMethod.CALL -> {
+ EthereumBody(
+ method = EthereumMethod.CALL.value,
+ params = listOf(EthCallParams(
+ "0x70a08231000000000000000000000000" + address?.substring(2), contractAddress
+ ?: ""),
+ "latest"
+ ))
+ }
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumResponse.kt
similarity index 76%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumResponse.kt
index 6e193290b5..3e8da36c84 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumResponse.kt
@@ -1,10 +1,10 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
-data class InfuraResponse(
+data class EthereumResponse(
@Json(name = "jsonrpc")
val jsonrpc: String = "",
@@ -15,11 +15,11 @@ data class InfuraResponse(
val result: String? = null,
@Json(name = "error")
- val error: InfuraError? = null
+ val error: EthereumError? = null
)
@JsonClass(generateAdapter = true)
-data class InfuraError(
+data class EthereumError(
@Json(name = "code")
val code: Int? = null,
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarAddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarAddressService.kt
new file mode 100644
index 0000000000..4728c0cda6
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarAddressService.kt
@@ -0,0 +1,19 @@
+package com.tangem.blockchain.blockchains.stellar
+
+import com.tangem.blockchain.common.AddressService
+import org.stellar.sdk.KeyPair
+
+class StellarAddressService: AddressService {
+ override fun makeAddress(walletPublicKey: ByteArray): String {
+ val kp = KeyPair.fromPublicKey(walletPublicKey)
+ return kp.accountId
+ }
+
+ override fun validate(address: String): Boolean {
+ return try {
+ KeyPair.fromAccountId(address) != null
+ } catch (exception: IllegalArgumentException) {
+ false
+ }
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarNetworkManager.kt
similarity index 90%
rename from blockchain/src/main/java/com/tangem/blockchain/stellar/StellarNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarNetworkManager.kt
index 85e5cfbd04..ec6ee2cfd8 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarNetworkManager.kt
@@ -1,10 +1,10 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_STELLAR
-import com.tangem.blockchain.common.network.API_STELLAR_TESTNET
-import com.tangem.blockchain.stellar.StellarWalletManager.Companion.STROOPS_IN_XLM
+import com.tangem.blockchain.blockchains.stellar.StellarWalletManager.Companion.STROOPS_IN_XLM
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_STELLAR
+import com.tangem.blockchain.network.API_STELLAR_TESTNET
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
@@ -15,7 +15,7 @@ import org.stellar.sdk.requests.ErrorResponse
import java.io.IOException
import java.math.BigDecimal
-class StellarNetworkManager(isTestNet: Boolean) {
+class StellarNetworkManager(isTestNet: Boolean = false) {
val network: Network = if (isTestNet) Network.TESTNET else Network.PUBLIC
private val stellarServer by lazy {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarTransactionBuilder.kt
similarity index 88%
rename from blockchain/src/main/java/com/tangem/blockchain/stellar/StellarTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarTransactionBuilder.kt
index ebe47c630e..e5550fe188 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarTransactionBuilder.kt
@@ -1,10 +1,7 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
import com.tangem.blockchain.common.AmountType
import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.stellar.StellarWalletManager.Companion.BASE_FEE
-import com.tangem.blockchain.stellar.StellarWalletManager.Companion.STROOPS_IN_XLM
-import com.tangem.common.extensions.hexToBytes
import org.stellar.sdk.*
import org.stellar.sdk.xdr.AccountID
import org.stellar.sdk.xdr.DecoratedSignature
@@ -12,7 +9,7 @@ import org.stellar.sdk.xdr.Signature
import org.stellar.sdk.xdr.SignatureHint
import java.util.*
-class StellarTransactionBuilder(private val newtorkManager: StellarNetworkManager, private val publicKey: ByteArray) {
+class StellarTransactionBuilder(private val networkManager: StellarNetworkManager, private val publicKey: ByteArray) {
private lateinit var transaction: Transaction
@@ -22,7 +19,7 @@ class StellarTransactionBuilder(private val newtorkManager: StellarNetworkManage
val sourceKeyPair = KeyPair.fromAccountId(transactionData.sourceAddress)
if (transactionData.amount.type == AmountType.Coin) {
- val operation = if (newtorkManager.checkIsAccountCreated(transactionData.sourceAddress)) {
+ val operation = if (networkManager.checkIsAccountCreated(transactionData.sourceAddress)) {
PaymentOperation.Builder(destinationKeyPair.accountId,
AssetTypeNative(),
transactionData.amount.value.toString())
@@ -64,7 +61,7 @@ class StellarTransactionBuilder(private val newtorkManager: StellarNetworkManage
val maxTime = currentTime + 120
transaction = Transaction.Builder(
- Account(sourceKeyPair.accountId, sequence), newtorkManager.network)
+ Account(sourceKeyPair.accountId, sequence), networkManager.network)
.addOperation(operation)
.addTimeBounds(TimeBounds(minTime, maxTime))
.setOperationFee(fee)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarWalletManager.kt
similarity index 60%
rename from blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarWalletManager.kt
index 754cf7fa60..fc53c55460 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarWalletManager.kt
@@ -1,33 +1,28 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
import android.util.Log
import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
import com.tangem.common.CompletionResult
import java.math.BigDecimal
import java.util.*
class StellarWalletManager(
- private val cardId: String,
- walletPublicKey: ByteArray,
- override var wallet: CurrencyWallet,
- isTestNet: Boolean = false
-) : WalletManager,
- TransactionSender,
- FeeProvider {
+ cardId: String,
+ wallet: Wallet,
+ private val transactionBuilder: StellarTransactionBuilder,
+ private val networkManager: StellarNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
+
+ private val blockchain = wallet.blockchain
- override val blockchain: Blockchain = Blockchain.Stellar
- private val address = blockchain.makeAddress(walletPublicKey)
- private val networkManager = StellarNetworkManager(isTestNet)
- private val builder = StellarTransactionBuilder(networkManager, walletPublicKey)
private var baseFee = BASE_FEE
private var baseReserve = BASE_RESERVE
private var sequence = 0L
override suspend fun update() {
- val result = networkManager.getInfo(address, wallet.balances[AmountType.Token]?.address)
+ val result = networkManager.getInfo(wallet.address, wallet.amounts[AmountType.Token]?.address)
when (result) {
is Result.Failure -> updateError(result.error)
is Result.Success -> updateWallet(result.data)
@@ -35,15 +30,15 @@ class StellarWalletManager(
}
private fun updateWallet(data: StellarResponse) {
- wallet.balances[AmountType.Coin]?.value = data.balance
- wallet.balances[AmountType.Token]?.value = data.assetBalance
- wallet.balances[AmountType.Reserve]?.value = data.baseReserve
+ wallet.amounts[AmountType.Coin]?.value = data.balance
+ wallet.amounts[AmountType.Token]?.value = data.assetBalance
+ wallet.amounts[AmountType.Reserve]?.value = data.baseReserve
sequence = data.sequence
baseFee = data.baseFee
baseReserve = data.baseReserve
val currentTime = Calendar.getInstance().timeInMillis
- wallet.pendingTransactions.forEach { transaction ->
+ wallet.transactions.forEach { transaction ->
if (transaction.date?.timeInMillis ?: 0 - currentTime > 10) {
transaction.status = TransactionStatus.Confirmed
}
@@ -56,10 +51,10 @@ class StellarWalletManager(
}
override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult {
- val hashes = builder.buildToSign(transactionData, sequence, baseFee.toStroops())
+ val hashes = transactionBuilder.buildToSign(transactionData, sequence, baseFee.toStroops())
when (val signerResponse = signer.sign(hashes.toTypedArray(), cardId)) {
is CompletionResult.Success -> {
- val transactionToSend = builder.buildToSend(signerResponse.data.signature)
+ val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature)
return networkManager.sendTransaction(transactionToSend)
}
is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpAddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpAddressService.kt
new file mode 100644
index 0000000000..9c0b49c23a
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpAddressService.kt
@@ -0,0 +1,35 @@
+package com.tangem.blockchain.blockchains.xrp
+
+import com.ripple.encodings.addresses.Addresses
+import com.tangem.blockchain.common.AddressService
+import com.tangem.common.extensions.calculateRipemd160
+import com.tangem.common.extensions.calculateSha256
+import com.tangem.common.extensions.toCompressedPublicKey
+
+class XrpAddressService : AddressService {
+ override fun makeAddress(walletPublicKey: ByteArray): String {
+ val canonicalPublicKey = canonizePublicKey(walletPublicKey)
+ val publicKeyHash = canonicalPublicKey.calculateSha256().calculateRipemd160()
+ return Addresses.encodeAccountID(publicKeyHash)
+ }
+
+ override fun validate(address: String): Boolean {
+ return try {
+ Addresses.decodeAccountID(address)
+ address.startsWith("r")
+ } catch (excpetion: Exception) {
+ false
+ }
+ }
+
+ companion object {
+ fun canonizePublicKey(publicKey: ByteArray): ByteArray {
+ val compressedPublicKey = publicKey.toCompressedPublicKey()
+ return if (compressedPublicKey.size == 32) {
+ byteArrayOf(0xED.toByte()) + compressedPublicKey
+ } else {
+ compressedPublicKey
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpTransactionBuilder.kt
similarity index 86%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpTransactionBuilder.kt
index a91258d524..1906d38fb1 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpTransactionBuilder.kt
@@ -1,20 +1,21 @@
-package com.tangem.blockchain.xrp
+package com.tangem.blockchain.blockchains.xrp
import com.ripple.core.coretypes.AccountID
import com.ripple.core.coretypes.Amount
import com.ripple.core.coretypes.uint.UInt32
import com.ripple.crypto.ecdsa.ECDSASignature
import com.ripple.utils.HashUtils
+import com.tangem.blockchain.blockchains.xrp.override.XrpPayment
+import com.tangem.blockchain.blockchains.xrp.override.XrpSignedTransaction
import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.extensions.bigIntegerValue
-import com.tangem.blockchain.xrp.override.XrpPayment
-import com.tangem.blockchain.xrp.override.XrpSignedTransaction
+import com.tangem.blockchain.extensions.bigIntegerValue
import org.bitcoinj.core.ECKey
import java.math.BigInteger
class XrpTransactionBuilder(walletPublicKey: ByteArray) {
- private val canonicalPublicKey = XrpAddressFactory.canonizePublicKey(walletPublicKey)
var sequence: Long? = null
+
+ private val canonicalPublicKey = XrpAddressService.canonizePublicKey(walletPublicKey)
private var transaction: XrpSignedTransaction? = null
fun buildToSign(transactionData: TransactionData): ByteArray {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpWalletManager.kt
similarity index 56%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpWalletManager.kt
index cf6c8206a8..4301da80ad 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpWalletManager.kt
@@ -1,34 +1,24 @@
-package com.tangem.blockchain.xrp
+package com.tangem.blockchain.blockchains.xrp
import android.util.Log
+import com.tangem.blockchain.blockchains.xrp.network.XrpInfoResponse
+import com.tangem.blockchain.blockchains.xrp.network.XrpNetworkManager
import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
-import com.tangem.blockchain.xrp.network.XrpInfoResponse
-import com.tangem.blockchain.xrp.network.XrpNetworkManager
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
import com.tangem.common.CompletionResult
class XrpWalletManager(
- private val cardId: String,
- private val walletPublicKey: ByteArray,
- override var wallet: CurrencyWallet
-) : WalletManager,
- TransactionSender,
- FeeProvider {
+ cardId: String,
+ wallet: Wallet,
+ private val transactionBuilder: XrpTransactionBuilder,
+ private val networkManager: XrpNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
- override val blockchain = Blockchain.XRP
- private val address = blockchain.makeAddress(walletPublicKey)
- private val transactionBuilder = XrpTransactionBuilder(walletPublicKey)
- private val networkManager = XrpNetworkManager()
-
- init {
- wallet.balances[AmountType.Coin] = Amount(null, blockchain)
- wallet.balances[AmountType.Reserve] = Amount(null, blockchain, type = AmountType.Reserve)
- }
+ private val blockchain = wallet.blockchain
override suspend fun update() {
- val result = networkManager.getInfo(address)
+ val result = networkManager.getInfo(wallet.address)
when (result) {
is Result.Success -> updateWallet(result.data)
is Result.Failure -> updateError(result.error)
@@ -37,25 +27,19 @@ class XrpWalletManager(
private fun updateWallet(response: XrpInfoResponse) {
Log.d(this::class.java.simpleName, "Balance is ${response.balance}")
- wallet.balances[AmountType.Reserve]?.value = response.reserveBase
+ wallet.amounts[AmountType.Reserve]?.value = response.reserveBase
if (!response.accountFound) {
updateError(Exception("Account not found")) //TODO rework, add reserve
return
}
- wallet.balances[AmountType.Coin]?.value = response.balance - response.reserveBase
+ wallet.amounts[AmountType.Coin]?.value = response.balance - response.reserveBase
transactionBuilder.sequence = response.sequence
if (response.hasUnconfirmed) {
- if (wallet.pendingTransactions.isEmpty()) {
- wallet.pendingTransactions.add(TransactionData(
- Amount(blockchain.currency, decimals = blockchain.decimals),
- null,
- "unknown",
- wallet.address))
- }
+ if (wallet.transactions.isEmpty()) wallet.addIncomingTransaction()
} else {
- wallet.pendingTransactions.clear()
+ wallet.transactions.clear()
}
}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/XrpNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/XrpNetworkManager.kt
similarity index 84%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/XrpNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/XrpNetworkManager.kt
index 8066fe1bea..7191b98d53 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/XrpNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/XrpNetworkManager.kt
@@ -1,12 +1,12 @@
-package com.tangem.blockchain.xrp.network
+package com.tangem.blockchain.blockchains.xrp.network
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_RIPPLED
-import com.tangem.blockchain.common.network.API_RIPPLED_RESERVE
-import com.tangem.blockchain.common.network.createRetrofitInstance
-import com.tangem.blockchain.xrp.network.rippled.RippledApi
-import com.tangem.blockchain.xrp.network.rippled.RippledProvider
+import com.tangem.blockchain.blockchains.xrp.network.rippled.RippledApi
+import com.tangem.blockchain.blockchains.xrp.network.rippled.RippledProvider
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_RIPPLED
+import com.tangem.blockchain.network.API_RIPPLED_RESERVE
+import com.tangem.blockchain.network.createRetrofitInstance
import retrofit2.HttpException
import java.io.IOException
import java.math.BigDecimal
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledApi.kt
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledApi.kt
index e881830e69..bf4fbef679 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledApi.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.network.rippled
+package com.tangem.blockchain.blockchains.xrp.network.rippled
import retrofit2.http.Body
import retrofit2.http.Headers
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledProvider.kt
similarity index 90%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledProvider.kt
index 73e67cd19c..bfceb241ca 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledProvider.kt
@@ -1,16 +1,16 @@
-package com.tangem.blockchain.xrp.network.rippled
+package com.tangem.blockchain.blockchains.xrp.network.rippled
+import com.tangem.blockchain.blockchains.xrp.network.XrpFeeResponse
+import com.tangem.blockchain.blockchains.xrp.network.XrpInfoResponse
import com.tangem.blockchain.common.Blockchain
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
-import com.tangem.blockchain.xrp.network.XrpFeeResponse
-import com.tangem.blockchain.xrp.network.XrpInfoResponse
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
class RippledProvider(private val api: RippledApi) {
- private val decimals = Blockchain.XRP.decimals.toInt()
+ private val decimals = Blockchain.XRP.decimals()
suspend fun getInfo(address: String): Result {
return try {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledResponse.kt
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledResponse.kt
index 47d91f3634..c8137a6cd5 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.network.rippled
+package com.tangem.blockchain.blockchains.xrp.network.rippled
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpBase58.java
similarity index 98%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpBase58.java
index 3ab3f6f16a..24c47219bf 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpBase58.java
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.override;
+package com.tangem.blockchain.blockchains.xrp.override;
import java.math.BigInteger;
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpPayment.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpPayment.java
similarity index 85%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpPayment.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpPayment.java
index 1fa01213a5..d00d8184bd 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpPayment.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpPayment.java
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.override;
+package com.tangem.blockchain.blockchains.xrp.override;
import com.ripple.core.types.known.tx.txns.Payment;
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpSignedTransaction.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpSignedTransaction.java
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpSignedTransaction.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpSignedTransaction.java
index 926a176adb..a455b853fa 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpSignedTransaction.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpSignedTransaction.java
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.override;
+package com.tangem.blockchain.blockchains.xrp.override;
import com.ripple.core.coretypes.Amount;
import com.ripple.core.coretypes.Blob;
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoAddress.kt
deleted file mode 100644
index 3aecd18ff1..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoAddress.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.tangem.blockchain.cardano
-
-import co.nstant.`in`.cbor.CborBuilder
-import co.nstant.`in`.cbor.CborDecoder
-import co.nstant.`in`.cbor.CborEncoder
-import co.nstant.`in`.cbor.model.Array
-import co.nstant.`in`.cbor.model.ByteString
-import co.nstant.`in`.cbor.model.UnsignedInteger
-import com.tangem.blockchain.cardano.crypto.Blake2b
-import com.tangem.blockchain.common.extensions.decodeBase58
-import com.tangem.blockchain.common.extensions.encodeBase58
-import org.spongycastle.crypto.util.DigestFactory
-import java.io.ByteArrayInputStream
-import java.io.ByteArrayOutputStream
-import java.util.zip.CRC32
-
-class CardanoAddressFactory {
- companion object {
- fun makeAddress(cardPublicKey: ByteArray, testNet: Boolean = false): String {
- val extendedPublicKey = extendPublicKey(cardPublicKey)
-
- val pubKeyWithAttributesBaos = ByteArrayOutputStream()
- CborEncoder(pubKeyWithAttributesBaos).encode(CborBuilder()
- .addArray()
- .add(0)
- .addArray()
- .add(0)
- .add(extendedPublicKey)
- .end()
- .addMap()
- .end()
- .end()
- .build())
- val pubKeyWithAttributes = pubKeyWithAttributesBaos.toByteArray()
-
- val sha3Digest = DigestFactory.createSHA3_256()
- sha3Digest.update(pubKeyWithAttributes, 0, pubKeyWithAttributes.size)
- val sha3Hash = ByteArray(32)
- sha3Digest.doFinal(sha3Hash, 0)
-
- val blake2b = Blake2b.Digest.newInstance(28)
- val blakeHash = blake2b.digest(sha3Hash)
-
- val hashWithAttributesBaos = ByteArrayOutputStream()
- CborEncoder(hashWithAttributesBaos).encode(CborBuilder()
- .addArray()
- .add(blakeHash)
- .addMap() //additional attributes
- .end()
- .add(0) //address type
- .end()
- .build())
- val hashWithAttributes = hashWithAttributesBaos.toByteArray()
-
- val crc32 = CRC32()
- crc32.update(hashWithAttributes)
- val checksum = crc32.value
-
- val addressItem = CborBuilder().add(hashWithAttributes).build().get(0)
- addressItem.setTag(24)
-
- //addr + checksum
- val addressBaos = ByteArrayOutputStream()
- CborEncoder(addressBaos).encode(CborBuilder()
- .addArray()
- .add(addressItem)
- .add(checksum)
- .end()
- .build())
-
- val hexAddress = addressBaos.toByteArray()
- return hexAddress.encodeBase58()
- }
-
- fun extendPublicKey(publicKey: ByteArray): ByteArray {
- val zeroBytes = ByteArray(32)
- zeroBytes.fill(0)
- return publicKey + zeroBytes
- }
- }
-}
-
-class CardanoAddressValidator {
- companion object {
- fun validate(address: String): Boolean {
- val decoded = address.decodeBase58() ?: return false
-
- return try {
- val bais = ByteArrayInputStream(decoded)
- val addressList =
- (CborDecoder(bais).decode()[0] as Array).dataItems
- val addressItemBytes = (addressList[0] as ByteString).bytes
- val checksum = (addressList[1] as UnsignedInteger).value.toLong()
-
- val crc32 = CRC32()
- crc32.update(addressItemBytes)
- val calculatedChecksum = crc32.value
-
- checksum == calculatedChecksum
- } catch (e: Exception) {
- false
- }
- }
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteApi.kt b/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteApi.kt
deleted file mode 100644
index e394d424f6..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteApi.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.tangem.blockchain.cardano.network.api
-
-import com.tangem.blockchain.cardano.network.adalite.AdaliteAddress
-import com.tangem.blockchain.cardano.network.adalite.AdaliteSendBody
-import com.tangem.blockchain.cardano.network.adalite.AdaliteUnspents
-import retrofit2.http.*
-import shadow.okhttp3.ResponseBody
-
-interface AdaliteApi {
- @GET("/api/addresses/summary/{address}")
- suspend fun getAddress(@Path("address") address: String): AdaliteAddress
-
- @Headers("Content-Type: application/json")
- @POST("/api/bulk/addresses/utxo")
- suspend fun getUnspents(@Body address: String): AdaliteUnspents
-
- @Headers("Content-Type: application/json")
- @POST("/api/v2/txs/signed")
- suspend fun sendTransaction(@Body adaliteBody: AdaliteSendBody): ResponseBody // List?
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/AddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/common/AddressService.kt
new file mode 100644
index 0000000000..2e408eaee2
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/AddressService.kt
@@ -0,0 +1,6 @@
+package com.tangem.blockchain.common
+
+interface AddressService {
+ fun makeAddress(walletPublicKey: ByteArray): String
+ fun validate(address: String): Boolean
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Amount.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Amount.kt
new file mode 100644
index 0000000000..bf30907a9e
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Amount.kt
@@ -0,0 +1,26 @@
+package com.tangem.blockchain.common
+
+import java.math.BigDecimal
+
+data class Amount(
+ val currencySymbol: String,
+ var value: BigDecimal? = null,
+ val address: String? = null,
+ val decimals: Int,
+ val type: AmountType = AmountType.Coin
+) {
+ constructor(
+ value: BigDecimal?,
+ blockchain: Blockchain,
+ address: String? = null,
+ type: AmountType = AmountType.Coin
+ ) : this(blockchain.currency, value, address, blockchain.decimals(), type)
+
+ constructor(token: Token, value: BigDecimal? = null) :
+ this(token.symbol, value, token.contractAddress, token.decimals, AmountType.Token)
+
+ constructor(amount: Amount, value: BigDecimal) :
+ this(amount.currencySymbol, value, amount.address, amount.decimals, amount.type)
+}
+
+enum class AmountType { Coin, Token, Reserve }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt
index 5d98bdceef..c579c2d3db 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt
@@ -1,74 +1,87 @@
package com.tangem.blockchain.common
-import com.tangem.blockchain.binance.BinanceAddressFactory
-import com.tangem.blockchain.binance.BinanceAddressValidator
-import com.tangem.blockchain.bitcoin.BitcoinAddressFactory
-import com.tangem.blockchain.bitcoin.BitcoinAddressValidator
-import com.tangem.blockchain.cardano.CardanoAddressFactory
-import com.tangem.blockchain.cardano.CardanoAddressValidator
-import com.tangem.blockchain.ethereum.EthereumAddressFactory
-import com.tangem.blockchain.ethereum.EthereumAddressValidator
-
-import com.tangem.blockchain.stellar.StellarAddressFactory
-import com.tangem.blockchain.xrp.XrpAddressFactory
-import com.tangem.blockchain.xrp.XrpAddressValidator
-
-import java.math.BigDecimal
+import com.tangem.blockchain.blockchains.binance.BinanceAddressService
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinAddressService
+import com.tangem.blockchain.blockchains.bitcoincash.BitcoinCashAddressService
+import com.tangem.blockchain.blockchains.cardano.CardanoAddressService
+import com.tangem.blockchain.blockchains.ethereum.EthereumAddressService
+import com.tangem.blockchain.blockchains.stellar.StellarAddressService
+import com.tangem.blockchain.blockchains.xrp.XrpAddressService
enum class Blockchain(
val id: String,
val currency: String,
- val decimals: Byte,
- val fullName: String,
- val pendingTransactionTimeout: Int
+ val fullName: String
) {
- Unknown("", "", 0, "", 0),
- Bitcoin("BTC", "BTC", 8, "Bitcoin", 0),
- BitcoinTestnet("BTC/test", "BTCt", 8, "Bitcoin Testnet", 0),
- Ethereum("ETH", "ETH", 18, "Ethereum", 0),
- Rootstock("", "", 18, "", 0),
- Cardano("CARDANO", "ADA", 6, "Cardano", 0),
- XRP("XRP", "XRP", 6, "XRP Ledger", 0),
- Binance("BINANCE", "BNB", 8, "Binance", 0),
- BinanceTestnet("BINANCE/test", "BNBt", 8, "Binance", 0),
- Stellar("XLM", "XLM", 7, "Stellar", 0);
+ Unknown("", "", ""),
+ Bitcoin("BTC", "BTC", "Bitcoin"),
+ BitcoinTestnet("BTC/test", "BTCt", "Bitcoin Testnet"),
+ BitcoinCash("BCH", "BCH", "Bitcoin Cash"),
+ Ethereum("ETH", "ETH", "Ethereum"),
+ RSK("RSK", "RBTC", "RSK"),
+ Cardano("CARDANO", "ADA", "Cardano"),
+ XRP("XRP", "XRP", "XRP Ledger"),
+ Binance("BINANCE", "BNB", "Binance"),
+ BinanceTestnet("BINANCE/test", "BNBt", "Binance"),
+ Stellar("XLM", "XLM", "Stellar");
- fun roundingMode(): Int = when (this) {
- Bitcoin, Ethereum, Rootstock, Binance -> BigDecimal.ROUND_DOWN
- Cardano -> BigDecimal.ROUND_UP
- else -> BigDecimal.ROUND_HALF_UP
+ fun decimals(): Int = when (this) {
+ Bitcoin, BitcoinTestnet, BitcoinCash, Binance, BinanceTestnet -> 8
+ Cardano, XRP -> 6
+ Ethereum, RSK -> 18
+ Stellar -> 7
+ Unknown -> 0
}
- fun makeAddress(walletPublicKey: ByteArray): String {
- return when (this) {
- Unknown -> throw Exception("unsupported blockchain")
- Bitcoin -> BitcoinAddressFactory.makeAddress(walletPublicKey)
- BitcoinTestnet -> BitcoinAddressFactory.makeAddress(walletPublicKey, testNet = true)
- Ethereum -> EthereumAddressFactory.makeAddress(walletPublicKey)
-// Rootstock -> RootstockAddressFactory.makeAddress(cardPublicKey)
- Cardano -> CardanoAddressFactory.makeAddress(walletPublicKey)
- XRP -> XrpAddressFactory.makeAddress(walletPublicKey)
- Binance -> BinanceAddressFactory.makeAddress(walletPublicKey)
- BinanceTestnet -> BinanceAddressFactory.makeAddress(walletPublicKey, testNet = true)
- Stellar -> StellarAddressFactory.makeAddress(walletPublicKey)
- else -> throw Exception("unsupported blockchain")
- }
+ fun pendingTransactionsTimeout(): Int = when (this) {
+ else -> 0
}
- fun validateAddress(address: String): Boolean {
- return when (this) {
- Unknown -> throw Exception("unsupported blockchain")
- Bitcoin -> BitcoinAddressValidator.validate(address)
- BitcoinTestnet -> BitcoinAddressValidator.validate(address, testNet = true)
- Ethereum -> EthereumAddressValidator.validate(address)
-// Rootstock -> RootstockAddressValidator.validate(address)
- Cardano -> CardanoAddressValidator.validate(address)
- XRP -> XrpAddressValidator.validate(address)
- Binance -> BinanceAddressValidator.validate(address)
- BinanceTestnet -> BinanceAddressValidator.validate(address, testNet = true)
-// Stellar -> StellarAddressValidator.validate(address)
- else -> throw Exception("unsupported blockchain")
+ fun makeAddress(walletPublicKey: ByteArray): String = getAddressService().makeAddress(walletPublicKey)
+
+ fun validateAddress(address: String): Boolean = getAddressService().validate(address)
+
+ private fun getAddressService(): AddressService = when (this) {
+ Unknown -> throw Exception("unsupported blockchain")
+ Bitcoin -> BitcoinAddressService()
+ BitcoinTestnet -> BitcoinAddressService(true)
+ BitcoinCash -> BitcoinCashAddressService()
+ Ethereum, RSK -> EthereumAddressService()
+ Cardano -> CardanoAddressService()
+ XRP -> XrpAddressService()
+ Binance -> BinanceAddressService()
+ BinanceTestnet -> BinanceAddressService(true)
+ Stellar -> StellarAddressService()
+ }
+
+ fun getShareUri(address: String): String = when (this) {
+ Bitcoin -> "bitcoin:$address"
+ Ethereum -> "ethereum:$address"
+ XRP -> "ripple:$address"
+ else -> address
+ }
+
+ fun getExploreUrl(address: String, token: Token? = null): String = when (this) {
+ Binance -> "https://explorer.binance.org/address/$address"
+ Bitcoin -> "https://blockchain.info/address/$address"
+ BitcoinTestnet -> "https://live.blockcypher.com/btc-testnet/address/$address"
+ BitcoinCash -> "https://blockchair.com/bitcoin-cash/address/$address"
+ Cardano -> "https://cardanoexplorer.com/address/$address"
+ Ethereum -> if (token == null) {
+ "https://etherscan.io/address/"
+ } else {
+ "https://etherscan.io/token/${token.contractAddress}?a=$address"
}
+ RSK -> {
+ var url = "https://explorer.rsk.co/address/$address"
+ if (token != null) {
+ url += "?__tab=tokens"
+ }
+ url
+ }
+ Stellar -> "https://stellar.expert/explorer/public/account/$address"
+ XRP -> "https://xrpscan.com/account/$address"
+ else -> throw Exception("Explore URL not defined!")
}
companion object {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Token.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Token.kt
new file mode 100644
index 0000000000..26fbb8af6b
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Token.kt
@@ -0,0 +1,7 @@
+package com.tangem.blockchain.common
+
+data class Token(
+ val symbol: String,
+ val contractAddress: String,
+ val decimals: Int
+)
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/TransactionData.kt b/blockchain/src/main/java/com/tangem/blockchain/common/TransactionData.kt
new file mode 100644
index 0000000000..d1774c0b99
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/TransactionData.kt
@@ -0,0 +1,19 @@
+package com.tangem.blockchain.common
+
+import java.util.*
+
+data class TransactionData(
+ val amount: Amount,
+ val fee: Amount?,
+ val sourceAddress: String,
+ val destinationAddress: String,
+ val contractAddress: String? = null,
+ var status: TransactionStatus = TransactionStatus.Unconfirmed,
+ var date: Calendar? = null,
+ val hash: String? = null
+)
+
+
+enum class TransactionStatus { Confirmed, Unconfirmed }
+
+enum class TransactionError { WrongAmount, WrongFee, WrongTotal }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt
index 6cca63b075..9273763196 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt
@@ -3,53 +3,59 @@ package com.tangem.blockchain.common
import java.math.BigDecimal
import java.util.*
-interface Wallet {
- val config: WalletConfig
- val address: String
- val exploreUrl: String?
- val shareUrl: String?
-}
-
-class WalletConfig(
- val allowFeeSelection: Boolean,
- val allowFeeInclusion: Boolean,
- var allowExtract: Boolean = false,
- var allowLoad: Boolean = false
-)
-
-data class Amount(
- val currencySymbol: String,
- var value: BigDecimal? = null,
- val address: String? = null,
- val decimals: Byte,
- val type: AmountType = AmountType.Coin
+class Wallet(
+ val blockchain: Blockchain,
+ val address: String,
+ val token: Token? = null
) {
- constructor(
- value: BigDecimal?,
- blockchain: Blockchain,
- address: String? = null,
- type: AmountType = AmountType.Coin
- ) : this(blockchain.currency, value, address, blockchain.decimals, type)
+ val exploreUrl: String
+ val shareUrl: String
+ val transactions: MutableList = mutableListOf()
+ val amounts: MutableMap = mutableMapOf()
- constructor(token: Token, value: BigDecimal? = null) :
- this(token.symbol, value, token.contractAddress, token.decimals, AmountType.Token)
-}
+ init {
+ setAmount(Amount(null, blockchain, address))
+ if (token != null) setAmount(Amount(token))
-data class TransactionData(
- val amount: Amount,
- val fee: Amount?,
- val sourceAddress: String,
- val destinationAddress: String,
- var status: TransactionStatus = TransactionStatus.Unconfirmed,
- var date: Calendar? = null
-)
+ exploreUrl = blockchain.getExploreUrl(address, token)
+ shareUrl = blockchain.getShareUri(address)
+ }
-enum class AmountType { Coin, Token, Reserve }
+ fun setAmount(amount: Amount) {
+ amounts[amount.type] = amount
+ }
-enum class TransactionStatus { Confirmed, Unconfirmed }
+ fun setCoinValue(value: BigDecimal) {
+ val amount = Amount(value, blockchain, address)
+ setAmount(amount)
+ }
-enum class ValidationError { WrongAmount, WrongFee, WrongTotal }
+ fun setTokenValue(value: BigDecimal) {
+ if (token != null) {
+ val amount = Amount(token, value)
+ setAmount(amount)
+ }
+ }
+
+ fun setReserveValue(value: BigDecimal) {
+ val amount = Amount(value, blockchain, address, AmountType.Reserve)
+ setAmount(amount)
+ }
+
+ fun addTransaction(transaction: TransactionData) {
+ transactions.add(transaction.copy(date = Calendar.getInstance()))
+ }
+
+ fun addIncomingTransaction() {
+ val dummyAmount = Amount(null, blockchain)
+ val transaction = TransactionData(dummyAmount, dummyAmount,
+ "unknown", address, date = Calendar.getInstance()
+ )
+ transactions.add(transaction)
+ }
+
+ fun fundsAvailable(amountType: AmountType): BigDecimal {
+ return amounts[amountType]?.value ?: BigDecimal.ZERO
+ }
-interface TransactionValidator {
- fun validateTransaction(amount: Amount, fee: Amount?): EnumSet
}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt
index 6fe5a862ea..3271af9575 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt
@@ -1,26 +1,48 @@
package com.tangem.blockchain.common
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.isAboveZero
import com.tangem.commands.SignResponse
import com.tangem.common.CompletionResult
+import java.math.BigDecimal
+import java.util.*
-interface WalletManager {
- var wallet: CurrencyWallet
- val blockchain: Blockchain
+abstract class WalletManager(val cardId: String, var wallet: Wallet) {
- suspend fun update()
+ abstract suspend fun update()
+
+ fun createTransaction(amount: Amount, fee: Amount, destination: String): TransactionData {
+ return TransactionData(amount, fee,
+ wallet.address, destination, wallet.token?.contractAddress,
+ TransactionStatus.Unconfirmed, Calendar.getInstance(), null)
+ }
+
+ fun validateTransaction(amount: Amount, fee: Amount?): EnumSet {
+ val errors = EnumSet.noneOf(TransactionError::class.java)
+
+ if (!validateAmount(amount)) errors.add(TransactionError.WrongAmount)
+ if (fee == null) return errors
+
+ if (!validateAmount(fee)) errors.add(TransactionError.WrongFee)
+ val total = (amount.value ?: BigDecimal.ZERO) + (fee.value ?: BigDecimal.ZERO)
+ if (!validateAmount(Amount(amount, total))) errors.add(TransactionError.WrongTotal)
+
+ return errors
+ }
+
+ private fun validateAmount(amount: Amount): Boolean {
+ return !amount.isAboveZero() &&
+ wallet.fundsAvailable(amount.type) >= amount.value
+ }
}
interface TransactionSender {
- suspend fun send(transactionData: TransactionData, signer: TransactionSigner) : SimpleResult
+ suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult
+ suspend fun getFee(amount: Amount, destination: String): Result>
+
}
interface TransactionSigner {
suspend fun sign(hashes: Array, cardId: String): CompletionResult
-}
-
-interface FeeProvider {
- suspend fun getFee(amount: Amount, destination: String): Result>
}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt
index 3b2d48fb04..621ed2f129 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt
@@ -1,15 +1,29 @@
package com.tangem.blockchain.common
-import com.tangem.blockchain.binance.BinanceWalletManager
-import com.tangem.blockchain.bitcoin.BitcoinWalletManager
-import com.tangem.blockchain.cardano.CardanoWalletManager
-import com.tangem.blockchain.ethereum.Chain
-import com.tangem.blockchain.ethereum.EthereumWalletManager
+import com.tangem.blockchain.blockchains.binance.BinanceTransactionBuilder
+import com.tangem.blockchain.blockchains.binance.BinanceWalletManager
+import com.tangem.blockchain.blockchains.binance.network.BinanceNetworkManager
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinTransactionBuilder
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinWalletManager
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinNetworkManager
+import com.tangem.blockchain.blockchains.bitcoincash.BitcoinCashNetworkManager
+import com.tangem.blockchain.blockchains.bitcoincash.BitcoinCashTransactionBuilder
+import com.tangem.blockchain.blockchains.bitcoincash.BitcoinCashWalletManager
+import com.tangem.blockchain.blockchains.cardano.CardanoTransactionBuilder
+import com.tangem.blockchain.blockchains.cardano.CardanoWalletManager
+import com.tangem.blockchain.blockchains.cardano.network.CardanoNetworkManager
+import com.tangem.blockchain.blockchains.ethereum.EthereumTransactionBuilder
+import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager
+import com.tangem.blockchain.blockchains.ethereum.network.EthereumNetworkManager
+import com.tangem.blockchain.blockchains.stellar.StellarNetworkManager
+import com.tangem.blockchain.blockchains.stellar.StellarTransactionBuilder
-import com.tangem.blockchain.stellar.StellarWalletManager
-import com.tangem.blockchain.wallets.CurrencyWallet
-import com.tangem.blockchain.xrp.XrpWalletManager
+import com.tangem.blockchain.blockchains.stellar.StellarWalletManager
+import com.tangem.blockchain.blockchains.xrp.XrpTransactionBuilder
+import com.tangem.blockchain.blockchains.xrp.XrpWalletManager
+import com.tangem.blockchain.blockchains.xrp.network.XrpNetworkManager
import com.tangem.commands.Card
+import com.tangem.common.extensions.toCompressedPublicKey
object WalletManagerFactory {
@@ -18,69 +32,76 @@ object WalletManagerFactory {
val blockchainName: String = card.cardData?.blockchainName ?: return null
val blockchain = Blockchain.fromId(blockchainName)
- val token = getToken(card)
- val wallet = CurrencyWallet.newInstance(blockchain, blockchain.makeAddress(walletPublicKey), token)
+ val cardId = card.cardId
+ val token = getToken(card)
+
+ val wallet = Wallet(blockchain, blockchain.makeAddress(walletPublicKey), token)
when (blockchain) {
Blockchain.Bitcoin -> {
return BitcoinWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet
+ cardId, wallet,
+ BitcoinTransactionBuilder(walletPublicKey),
+ BitcoinNetworkManager()
)
}
Blockchain.BitcoinTestnet -> {
return BitcoinWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet,
- isTestNet = true
+ cardId, wallet,
+ BitcoinTransactionBuilder(walletPublicKey, true),
+ BitcoinNetworkManager(true)
)
}
- Blockchain.Ethereum -> {
- val chain = Chain.Mainnet
+ Blockchain.BitcoinCash -> {
+ return BitcoinCashWalletManager(
+ cardId, wallet,
+ BitcoinCashTransactionBuilder(walletPublicKey.toCompressedPublicKey()),
+ BitcoinCashNetworkManager()
+ )
+ }
+ Blockchain.Ethereum, Blockchain.RSK -> {
return EthereumWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet,
- chain = chain
+ cardId, wallet,
+ EthereumTransactionBuilder(walletPublicKey, blockchain),
+ EthereumNetworkManager(blockchain)
)
}
Blockchain.Stellar -> {
+ val networkManager = StellarNetworkManager()
+
return StellarWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet
+ cardId, wallet,
+ StellarTransactionBuilder(networkManager, walletPublicKey),
+ networkManager
)
}
Blockchain.Cardano -> {
return CardanoWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet
+ cardId, wallet,
+ CardanoTransactionBuilder(walletPublicKey),
+ CardanoNetworkManager()
)
}
Blockchain.XRP -> {
return XrpWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet
+ cardId, wallet,
+ XrpTransactionBuilder(walletPublicKey),
+ XrpNetworkManager()
)
}
Blockchain.Binance -> {
return BinanceWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet
+ cardId, wallet,
+ BinanceTransactionBuilder(walletPublicKey),
+ BinanceNetworkManager()
)
}
Blockchain.BinanceTestnet -> {
return BinanceWalletManager(
- cardId = card.cardId,
- walletPublicKey = walletPublicKey,
- wallet = wallet,
- isTestNet = true
+ cardId, wallet,
+ BinanceTransactionBuilder(walletPublicKey, true),
+ BinanceNetworkManager(true)
)
}
else -> return null
@@ -91,13 +112,6 @@ object WalletManagerFactory {
val symbol = card.cardData?.tokenSymbol ?: return null
val contractAddress = card.cardData?.tokenContractAddress ?: return null
val decimals = card.cardData?.tokenDecimal ?: return null
- return Token(symbol, contractAddress, decimals.toByte())
+ return Token(symbol, contractAddress, decimals)
}
-}
-
-
-data class Token(
- val symbol: String,
- val contractAddress: String,
- val decimals: Byte
-)
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumAddress.kt
deleted file mode 100644
index a301ee7e1c..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumAddress.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.tangem.blockchain.ethereum
-
-import org.kethereum.crypto.toAddress
-import org.kethereum.erc55.isValid
-import org.kethereum.model.Address
-import org.kethereum.model.PublicKey
-
-class EthereumAddressFactory {
- companion object {
- fun makeAddress(walletPublicKey: ByteArray): String =
- PublicKey(walletPublicKey.sliceArray(1..64)).toAddress().hex
- }
-}
-
-class EthereumAddressValidator {
- companion object {
- fun validate(address: String): Boolean = Address(address).isValid()
- }
-}
-
-enum class Chain(val id: Int) {
- Mainnet(1),
- Morden(2),
- Ropsten(3),
- Rinkeby(4),
- RootstockMainnet(30),
- RootstockTestnet(31),
- Kovan(42),
- EthereumClassicMainnet(61),
- EthereumClassicTestnet(62),
- Geth_private_chains(1337),
- MaticTestnet(8995);
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt
deleted file mode 100644
index 3999bdf7a3..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.tangem.blockchain.ethereum
-
-import android.util.Log
-import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.Token
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.ethereum.network.EthereumNetworkManager
-import com.tangem.blockchain.ethereum.network.EthereumResponse
-import com.tangem.blockchain.wallets.CurrencyWallet
-import com.tangem.common.CompletionResult
-import com.tangem.common.extensions.toHexString
-import org.kethereum.DEFAULT_GAS_LIMIT
-import org.kethereum.crypto.api.ec.ECDSASignature
-import org.kethereum.crypto.determineRecId
-import org.kethereum.crypto.impl.ec.canonicalise
-import org.kethereum.extensions.transactions.encodeRLP
-import org.kethereum.keccakshortcut.keccak
-import org.kethereum.model.*
-import java.math.BigDecimal
-import java.math.BigInteger
-
-class EthereumWalletManager(
- private val cardId: String,
- private val walletPublicKey: ByteArray,
- chain: Chain,
- token: Token? = null,
- override var wallet: CurrencyWallet
-) : WalletManager,
- TransactionSender,
- FeeProvider {
-
- override val blockchain: Blockchain = Blockchain.Ethereum
- private val address = blockchain.makeAddress(walletPublicKey)
- private val builder = EthereumTransactionBuilder(chain)
- private val networkManager = EthereumNetworkManager()
- private var pendingTxCount = -1L
- private var txCount = -1L
-
- init {
- if (token != null) wallet.balances[AmountType.Token] =
- Amount(
- token.symbol,
- null,
- token.contractAddress,
- token.decimals,
- AmountType.Token)
- wallet.balances[AmountType.Coin] = Amount(null, blockchain)
- }
-
- override suspend fun update() {
- val result = networkManager.getInfo(address, wallet.balances[AmountType.Token]?.address)
- when (result) {
- is Result.Failure -> updateError(result.error)
- is Result.Success -> updateWallet(result.data)
- }
- }
-
- private fun updateWallet(data: EthereumResponse) {
- wallet.balances[AmountType.Coin]?.value = data.balance
- wallet.balances[AmountType.Token]?.value = data.tokenBalance
- txCount = data.txCount
- pendingTxCount = data.pendingTxCount
- if (txCount == pendingTxCount) {
- wallet.pendingTransactions.forEach { it.status = TransactionStatus.Confirmed }
- } else if (wallet.pendingTransactions.isEmpty()) {
- wallet.pendingTransactions.add(TransactionData(
- Amount(blockchain.currency, decimals = blockchain.decimals),
- null,
- "unknown",
- wallet.address))
- }
- }
-
- private fun updateError(error: Throwable?) {
- Log.e(this::class.java.simpleName, error?.message ?: "")
- if (error != null) throw error
- }
-
- override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult {
- val transactionToSign = builder.buildToSign(transactionData, txCount.toBigInteger())
- ?: return SimpleResult.Failure(Exception("Not enough data"))
- when (val signerResponse = signer.sign(transactionToSign.hashes.toTypedArray(), cardId)) {
- is CompletionResult.Success -> {
- val transactionToSend = builder.buildToSend(signerResponse.data.signature, transactionToSign, walletPublicKey)
- return networkManager.sendTransaction(String.format("0x%s", transactionToSend.toHexString()))
- }
- is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
- }
- }
-
- override suspend fun getFee(amount: Amount, destination: String): Result> {
- val result = networkManager.getFee(getGasLimit(amount).value)
- when (result) {
- is Result.Success -> {
- val feeValues: List = result.data
- return Result.Success(
- feeValues.map { Amount(blockchain.currency, it, address, blockchain.decimals) })
- }
- is Result.Failure -> return result
- }
- }
-}
-
-private class EthereumTransactionBuilder(private val chain: Chain) {
-
- fun buildToSign(transactionData: TransactionData, nonce: BigInteger?): TransactionToSign? {
-
- val amount: BigDecimal = transactionData.amount.value ?: return null
- val transactionFee: BigDecimal = transactionData.fee?.value ?: return null
-
- val value = amount.movePointRight(transactionData.amount.decimals.toInt()).toBigInteger()
- val fee = transactionFee.movePointRight(transactionData.fee.decimals.toInt()).toBigInteger()
-
- val transaction = createTransactionWithDefaults(
- from = Address(transactionData.sourceAddress),
- to = Address(transactionData.destinationAddress),
- value = value,
- gasPrice = fee.divide(DEFAULT_GAS_LIMIT),
- gasLimit = DEFAULT_GAS_LIMIT,
- nonce = nonce,
- chain = ChainId(chain.id.toLong())
- )
- val hash = transaction.encodeRLP(SignatureData(v = chain.id.toBigInteger())).keccak()
- return TransactionToSign(transaction, listOf(hash))
- }
-
- fun buildToSend(signature: ByteArray, transactionToSign: TransactionToSign, walletPublicKey: ByteArray): ByteArray {
- val r = BigInteger(1, signature.copyOfRange(0, 32))
- val s = BigInteger(1, signature.copyOfRange(32, 64))
-
- val ecdsaSignature = ECDSASignature(r, s).canonicalise()
-
- val recId = ecdsaSignature.determineRecId(transactionToSign.hashes[0], PublicKey(walletPublicKey.sliceArray(1..64)))
- val v = (recId + 27 + 8 + (chain.id * 2)).toBigInteger()
- val signatureData = SignatureData(ecdsaSignature.r, ecdsaSignature.s, v)
-
- return transactionToSign.transaction.encodeRLP(signatureData)
- }
-}
-
-private class TransactionToSign(val transaction: Transaction, val hashes: List)
-
-enum class GasLimit(val value: Long) {
- Default(21000),
- Token(60000),
- High(300000)
-}
-
-private fun getGasLimit(amount: Amount): GasLimit {
- return when (amount.currencySymbol) {
- Blockchain.Ethereum.currency -> GasLimit.Default
- "DGX" -> GasLimit.High
- "CGT" -> GasLimit.High
- else -> GasLimit.Token
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraProvider.kt
deleted file mode 100644
index 2a04de5825..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraProvider.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.tangem.blockchain.ethereum.network
-
-class InfuraProvider(private val api: InfuraApi) {
- suspend fun getBalance(address: String) = api.postToInfura(createInfuraBody(InfuraMethod.GET_BALANCE, address))
- suspend fun getTokenBalance(address: String, contractAddress: String) = api.postToInfura(createInfuraBody(InfuraMethod.CALL, address, contractAddress))
- suspend fun getTxCount(address: String) = api.postToInfura(createInfuraBody(InfuraMethod.GET_TRANSACTION_COUNT, address))
- suspend fun getPendingTxCount(address: String) = api.postToInfura(createInfuraBody(InfuraMethod.GET_PENDING_COUNT, address))
- suspend fun getGasPrice() = api.postToInfura(createInfuraBody(InfuraMethod.GAS_PRICE))
- suspend fun sendTransaction(transaction: String) = api.postToInfura(createInfuraBody(InfuraMethod.SEND_RAW_TRANSACTION, transaction = transaction))
-}
-
-private fun createInfuraBody(
- method: InfuraMethod,
- address: String? = null,
- contractAddress: String? = null,
- transaction: String? = null): InfuraBody {
-
- return when (method) {
- InfuraMethod.GET_BALANCE ->
- InfuraBody(method = InfuraMethod.GET_BALANCE.value, params = listOf(address ?: "", "latest"))
- InfuraMethod.GET_TRANSACTION_COUNT ->
- InfuraBody(method = InfuraMethod.GET_TRANSACTION_COUNT.value, params = listOf(address ?: "", "latest"))
- InfuraMethod.GET_PENDING_COUNT ->
- InfuraBody(method = InfuraMethod.GET_TRANSACTION_COUNT.value, params = listOf(address ?: "", "pending"))
- InfuraMethod.GAS_PRICE ->
- InfuraBody(method = InfuraMethod.GAS_PRICE.value)
- InfuraMethod.SEND_RAW_TRANSACTION ->
- InfuraBody(method = InfuraMethod.SEND_RAW_TRANSACTION.value, params = listOf(transaction ?: ""))
- InfuraMethod.CALL -> {
- InfuraBody(
- method = InfuraMethod.CALL.value,
- params = listOf(EthCallParams(
- "0x70a08231000000000000000000000000" + address?.substring(2), contractAddress
- ?: ""),
- "latest"
- ))
- }
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/Amount.kt
similarity index 55%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/Amount.kt
index 8a9f4445e1..9c76097bc5 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/Amount.kt
@@ -1,8 +1,13 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
import com.tangem.blockchain.common.Amount
import java.math.BigInteger
fun Amount.bigIntegerValue(): BigInteger? {
return this.value?.movePointRight(this.decimals.toInt())?.toBigInteger()
+}
+
+fun Amount.isAboveZero(): Boolean {
+ val value = this.value ?: return false
+ return value.signum() == 1
}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/BitInteger.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/BitInteger.kt
similarity index 83%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/BitInteger.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/BitInteger.kt
index 6ac80e1bbd..09299f4e86 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/BitInteger.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/BitInteger.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
import org.bitcoinj.core.ECKey
import java.math.BigInteger
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/ByteArray.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/ByteArray.kt
similarity index 83%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/ByteArray.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/ByteArray.kt
index 29ce488afc..8b251179ca 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/ByteArray.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/ByteArray.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
import android.util.Base64
import org.bitcoinj.core.Base58
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/Coroutines.kt
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/Coroutines.kt
index 8451a23b67..52e65b7046 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/Coroutines.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
import com.tangem.TangemSdk
import com.tangem.blockchain.common.TransactionSigner
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/String.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/String.kt
similarity index 83%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/String.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/String.kt
index 8f14abf5f8..149d43ab34 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/String.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/String.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
import org.bitcoinj.core.AddressFormatException
import org.bitcoinj.core.Base58
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/network/RetrofitBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/network/RetrofitBuilder.kt
similarity index 85%
rename from blockchain/src/main/java/com/tangem/blockchain/common/network/RetrofitBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/network/RetrofitBuilder.kt
index afcffa0bfb..94d89c0531 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/network/RetrofitBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/network/RetrofitBuilder.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.network
+package com.tangem.blockchain.network
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
@@ -40,7 +40,7 @@ const val API_INFURA = "https://mainnet.infura.io/"
const val API_SOCHAIN_V2 = "https://chain.so/"
const val API_ESTIMATEFEE = "https://estimatefee.com/"
const val API_UPDATE_VERSION = "https://raw.githubusercontent.com/"
-const val API_ROOTSTOCK = "https://public-node.rsk.co/"
+const val API_RSK = "https://public-node.rsk.co/"
const val API_BLOCKCYPHER = "https://api.blockcypher.com/"
const val API_BINANCE = "https://dex.binance.org/"
const val API_BINANCE_TESTNET = "https://testnet-dex.binance.org/"
@@ -49,7 +49,8 @@ const val API_STELLAR = "https://horizon.stellar.org/"
const val API_STELLAR_RESERVE = "https://horizon.sui.li/"
const val API_STELLAR_TESTNET = "https://horizon-testnet.stellar.org/"
const val API_BLOCKCHAIN_INFO = "https://blockchain.info/"
-const val API_ADALITE = "https://explorer2.adalite.io"
-const val API_ADALITE_RESERVE = "https://nodes.southeastasia.cloudapp.azure.com"
-const val API_RIPPLED = "https://s1.ripple.com:51234"
-const val API_RIPPLED_RESERVE = "https://s2.ripple.com:51234"
\ No newline at end of file
+const val API_ADALITE = "https://explorer3.adalite.io/"
+const val API_ADALITE_RESERVE = "https://nodes.southeastasia.cloudapp.azure.com/"
+const val API_RIPPLED = "https://s1.ripple.com:51234/"
+const val API_RIPPLED_RESERVE = "https://s2.ripple.com:51234/"
+const val API_BLOCKCHAIR = "https://api.blockchair.com/"
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairApi.kt b/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairApi.kt
new file mode 100644
index 0000000000..b078327847
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairApi.kt
@@ -0,0 +1,36 @@
+package com.tangem.blockchain.network.blockchair
+
+import com.squareup.moshi.JsonClass
+import retrofit2.http.*
+
+interface BlockchairApi {
+ @GET("{blockchain}/dashboards/address/{address}")
+ suspend fun getAddressData(
+ @Path("address") address: String,
+ @Path("blockchain") blockchain: String,
+ @Query("key") key: String
+ ): BlockchairAddress
+
+ @GET("{blockchain}/dashboards/transaction/{transaction}")
+ suspend fun getTransaction(
+ @Path("transaction") transactionHash: String,
+ @Path("blockchain") blockchain: String,
+ @Query("key") key: String
+ ): BlockchairTransaction
+
+ @GET("{blockchain}/stats")
+ suspend fun getBlockchainStats(
+ @Path("blockchain") blockchain: String,
+ @Query("key") key: String
+ ): BlockchairStats
+
+ @POST("{blockchain}/push/transaction")
+ suspend fun sendTransaction(
+ @Body sendBody: BlockchairBody,
+ @Path("blockchain") blockchain: String,
+ @Query("key") key: String
+ )
+}
+
+@JsonClass(generateAdapter = true)
+data class BlockchairBody(val data: String)
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairProvider.kt
new file mode 100644
index 0000000000..a14c6b8561
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairProvider.kt
@@ -0,0 +1,96 @@
+package com.tangem.blockchain.network.blockchair
+
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinUnspentOutput
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinAddressResponse
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinFee
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinProvider
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
+import com.tangem.common.extensions.hexToBytes
+import java.math.BigDecimal
+import java.math.RoundingMode
+
+class BlockchairProvider(private val api: BlockchairApi, blockchain: Blockchain) : BitcoinProvider {
+ private val blockchainPath = when (blockchain) {
+ Blockchain.BitcoinCash -> "bitcoin-cash"
+ else -> throw Exception("${blockchain.fullName} blockchain is not supported by BlockchairProvider")
+ }
+ private val decimals = blockchain.decimals()
+
+ override suspend fun getInfo(address: String): Result {
+ return try {
+ val blockchairAddress = retryIO { api.getAddressData(address, blockchainPath, API_KEY) }
+
+ val addressData = blockchairAddress.data!!.getValue(address)
+ val addressInfo = addressData.addressInfo!!
+ val script = addressInfo.script!!.hexToBytes()
+
+ val hasUnconfirmed = checkHasUnconfirmed(addressData)
+
+ val unspentTransactions = addressData.unspentOutputs!!.map {
+ BitcoinUnspentOutput(
+ amount = it.amount!!.toBigDecimal().movePointLeft(decimals),
+ outputIndex = it.index!!.toLong(),
+ transactionHash = it.transactionHash!!.hexToBytes(),
+ outputScript = script
+ )
+ }
+
+ Result.Success(BitcoinAddressResponse(
+ balance = addressInfo.balance!!.toBigDecimal().movePointLeft(decimals),
+ hasUnconfirmed = hasUnconfirmed,
+ unspentOutputs = unspentTransactions
+ ))
+ } catch (error: Exception) {
+ Result.Failure(error)
+ }
+
+ }
+
+ private suspend fun checkHasUnconfirmed(addressData: BlockchairAddressData): Boolean {
+ for (utxo in addressData.unspentOutputs!!) { //check utxos first
+ if (utxo.block == -1) return true
+ }
+
+ return if (addressData.addressInfo!!.balance != 0L) { // if balance is not zero, unconfirmed tx should have unconfirmed utxo
+ false
+ } else {
+ if (addressData.transactions!!.isEmpty()) { // no transactions from this address ever
+ false
+ } else { // check last transaction in case it spent all funds
+ val lastTransactionHash = addressData.transactions[0]
+ val blockchairTransaction = retryIO {
+ api.getTransaction(lastTransactionHash, blockchainPath, API_KEY)
+ }
+ blockchairTransaction.data!!.getValue(lastTransactionHash).transaction!!.block == -1
+ }
+ }
+ }
+
+ override suspend fun getFee(): Result {
+ return try {
+ val stats = retryIO { api.getBlockchainStats(blockchainPath, API_KEY) }
+ val feePerKb = (stats.data!!.feePerByte!! * 1024).toBigDecimal().movePointLeft(decimals)
+ Result.Success(BitcoinFee(
+ minimalPerKb = (feePerKb * BigDecimal.valueOf(0.8)).setScale(decimals, RoundingMode.DOWN),
+ normalPerKb = feePerKb.setScale(decimals, RoundingMode.DOWN),
+ priorityPerKb = (feePerKb * BigDecimal.valueOf(1.2)).setScale(decimals, RoundingMode.DOWN)
+ ))
+ } catch (error: Exception) {
+ Result.Failure(error)
+ }
+ }
+
+ override suspend fun sendTransaction(transaction: String): SimpleResult {
+ return try {
+ retryIO { api.sendTransaction(BlockchairBody(transaction), blockchainPath, API_KEY) }
+ SimpleResult.Success
+ } catch (error: Exception) {
+ SimpleResult.Failure(error)
+ }
+ }
+}
+
+private const val API_KEY = "A___0Shpsu4KagE7oSabrw20DfXAqWlT"
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairResponse.kt
new file mode 100644
index 0000000000..8962ce7860
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/network/blockchair/BlockchairResponse.kt
@@ -0,0 +1,75 @@
+package com.tangem.blockchain.network.blockchair
+
+import com.google.gson.annotations.SerializedName
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+
+@JsonClass(generateAdapter = true)
+data class BlockchairAddress(
+ @Json(name = "data")
+ val data: Map? = null
+)
+
+data class BlockchairAddressData(
+ @Json(name = "address")
+ val addressInfo: BlockchairAddressInfo? = null,
+
+ @Json(name = "utxo")
+ val unspentOutputs: List? = null,
+
+ @Json(name = "transactions")
+ val transactions: List? = null
+)
+
+data class BlockchairAddressInfo(
+ @Json(name = "balance")
+ val balance: Long? = null,
+
+ @Json(name = "script_hex")
+ val script: String? = null,
+
+ @Json(name = "output_count")
+ val outputCount: Int? = null,
+
+ @Json(name = "unspent_output_count")
+ val unspentOutputCount: Int? = null
+)
+
+data class BlockchairUnspentOutput(
+ @Json(name = "block_id")
+ val block: Int? = null,
+
+ @Json(name = "transaction_hash")
+ val transactionHash: String? = null,
+
+ @Json(name = "index")
+ val index: Int? = null,
+
+ @Json(name = "value")
+ val amount: Long? = null
+)
+
+data class BlockchairTransaction(
+ @Json(name = "data")
+ val data: Map? = null
+)
+
+data class BlockchairTransactionData(
+ @Json(name = "transaction")
+ val transaction: BlockchairTransactionInfo? = null
+)
+
+data class BlockchairTransactionInfo(
+ @Json(name = "block_id")
+ val block: Int? = null
+)
+
+data class BlockchairStats(
+ @Json(name = "data")
+ val data: BlockchairStatsData? = null
+)
+
+data class BlockchairStatsData(
+ @Json(name = "suggested_transaction_fee_per_byte_sat")
+ val feePerByte: Int? = null
+)
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarAddress.kt
deleted file mode 100644
index 605d8f3e2e..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarAddress.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.tangem.blockchain.stellar
-
-import org.stellar.sdk.KeyPair
-
-class StellarAddressFactory {
- companion object {
- fun makeAddress(cardPublicKey: ByteArray): String {
- val kp = KeyPair.fromPublicKey(cardPublicKey)
- return kp.accountId
- }
- }
-}
-
-class StellarAddressValidator {
- companion object {
- fun validate(address: String): Boolean {
- return try {
- KeyPair.fromAccountId(address) != null
- } catch (exception: IllegalArgumentException) {
- false
- }
- }
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/wallets/CurrencyWallet.kt b/blockchain/src/main/java/com/tangem/blockchain/wallets/CurrencyWallet.kt
deleted file mode 100644
index 7710b95439..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/wallets/CurrencyWallet.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.tangem.blockchain.wallets
-
-import com.tangem.blockchain.common.*
-import java.util.*
-
-class CurrencyWallet(
- val blockchain: Blockchain,
- address: String,
- override val config: WalletConfig
-) : Wallet, TransactionValidator {
-
- override val exploreUrl: String? = null
- override val shareUrl: String? = null
- override val address: String
- get() = balances[AmountType.Coin]!!.address!!
-
- val pendingTransactions: MutableList = mutableListOf()
- val balances: MutableMap = mutableMapOf()
-
- init {
- addAmount(Amount(null, blockchain, address))
- }
-
- override fun validateTransaction(amount: Amount, fee: Amount?): EnumSet {
- TODO("not implemented")
- }
-
- fun addAmount(amount: Amount) {
- balances[amount.type] = amount
- }
-
- fun addPendingTransaction(transaction: TransactionData) {
- pendingTransactions.add(transaction.copy(date = Calendar.getInstance()))
- }
-
- companion object {
- fun newInstance(blockchain: Blockchain, address: String, token: Token?): CurrencyWallet {
-
- return when (blockchain) {
- Blockchain.Bitcoin, Blockchain.BitcoinTestnet, Blockchain.XRP -> {
- val config = WalletConfig(true, true)
- CurrencyWallet(blockchain, address, config)
- }
- Blockchain.Cardano, Blockchain.Binance, Blockchain.BinanceTestnet -> {
- val config = WalletConfig(false, true)
- CurrencyWallet(blockchain, address, config)
- }
- Blockchain.Ethereum -> {
- val config = WalletConfig(true, token == null)
- val wallet = CurrencyWallet(blockchain, address, config)
- if (token != null) wallet.addAmount(Amount(token))
- wallet
- }
- Blockchain.Stellar -> {
- val config = WalletConfig(false, token == null)
- val wallet = CurrencyWallet(blockchain, address, config)
- if (token != null) wallet.addAmount(Amount(token))
- wallet.addAmount(Amount(null, blockchain, address, AmountType.Reserve))
- wallet
- }
- else -> throw Exception("Unsupported blockchain")
- }
-
- }
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpAddress.kt
deleted file mode 100644
index 2bd702f67f..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpAddress.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.tangem.blockchain.xrp
-
-import com.ripple.encodings.addresses.Addresses
-import com.tangem.common.extensions.calculateRipemd160
-import com.tangem.common.extensions.calculateSha256
-import com.tangem.common.extensions.toCompressedPublicKey
-
-class XrpAddressFactory {
- companion object {
- fun makeAddress(walletPublicKey: ByteArray): String {
- val canonicalPublicKey = canonizePublicKey(walletPublicKey)
- val publicKeyHash = canonicalPublicKey.calculateSha256().calculateRipemd160()
- return Addresses.encodeAccountID(publicKeyHash)
- }
-
- fun canonizePublicKey(publicKey: ByteArray): ByteArray {
- val compressedPublicKey = publicKey.toCompressedPublicKey()
- return if (compressedPublicKey.size == 32) {
- byteArrayOf(0xED.toByte()) + compressedPublicKey
- } else {
- compressedPublicKey
- }
- }
- }
-}
-
-class XrpAddressValidator {
- companion object {
- fun validate(address: String): Boolean {
- return try {
- Addresses.decodeAccountID(address)
- address.startsWith("r")
- } catch (excpetion: Exception) {
- false
- }
- }
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/binance/BinanceAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/binance/BinanceAddressTest.kt
similarity index 72%
rename from blockchain/src/test/java/com/tangem/blockchain/binance/BinanceAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/binance/BinanceAddressTest.kt
index 7501ec0105..3293a1fe37 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/binance/BinanceAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/binance/BinanceAddressTest.kt
@@ -1,23 +1,26 @@
-package com.tangem.blockchain.binance
+package com.tangem.blockchain.blockchains.binance
import com.google.common.truth.Truth
import com.tangem.common.extensions.hexToBytes
import org.junit.Test
internal class BinanceAddressTest {
+
+ private val addressService = BinanceAddressService()
+
@Test
fun makeAddressFromCorrectPublicKey() {
val walletPublicKey = "04E3F3BE3CE3D8284DB3BA073AD0291040093D83C11A277B905D5555C9EC41073E103F4D9D299EDEA8285C51C3356A8681A545618C174251B984DF841F49D2376F".hexToBytes()
val expected = "bnb1m9wu5ncxk8mqhm3nfmxa552728wkty700rzhvu"
- Truth.assertThat(BinanceAddressFactory.makeAddress(walletPublicKey))
+ Truth.assertThat(addressService.makeAddress(walletPublicKey))
.isEqualTo(expected)
}
@Test
fun validateCorrectAddress() {
val address = "bnb1m9wu5ncxk8mqhm3nfmxa552728wkty700rzhvu"
- Truth.assertThat(BinanceAddressValidator.validate(address))
+ Truth.assertThat(addressService.validate(address))
.isTrue()
}
}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/bitcoin/BitcoinAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressTest.kt
similarity index 71%
rename from blockchain/src/test/java/com/tangem/blockchain/bitcoin/BitcoinAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressTest.kt
index ea4b181980..c8b7cca7ef 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/bitcoin/BitcoinAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressTest.kt
@@ -1,25 +1,26 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
import com.google.common.truth.Truth
import com.tangem.common.extensions.hexToBytes
import org.junit.Test
-import org.junit.jupiter.api.Assertions.*
class BitcoinAddressTest {
+ private val addressService = BitcoinAddressService()
+
@Test
fun makeAddressFromCorrectPublicKey() {
val walletPublicKey = "04752A727E14BBA5BD73B6714D72500F61FFD11026AD1196D2E1C54577CBEEAC3D11FC68A64700F8D533F4E311964EA8FB3AA26C588295F2133868D69C3E628693".hexToBytes()
val expected = "1D3vYSjCvzrsVVK5bNaPTjU3NxcN7NNXMN"
- Truth.assertThat(BitcoinAddressFactory.makeAddress(walletPublicKey))
+ Truth.assertThat(addressService.makeAddress(walletPublicKey))
.isEqualTo(expected)
}
@Test
fun validateCorrectAddress() {
val address = "1D3vYSjCvzrsVVK5bNaPTjU3NxcN7NNXMN"
- Truth.assertThat(BitcoinAddressValidator.validate(address))
+ Truth.assertThat(addressService.validate(address))
.isTrue()
}
}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashAddressTest.kt
new file mode 100644
index 0000000000..ff0d1a7f95
--- /dev/null
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoincash/BitcoinCashAddressTest.kt
@@ -0,0 +1,27 @@
+package com.tangem.blockchain.blockchains.bitcoincash
+
+import com.google.common.truth.Truth
+import com.tangem.common.extensions.hexToBytes
+import com.tangem.common.extensions.toCompressedPublicKey
+import org.junit.Test
+
+class BitcoinCashAddressTest {
+
+ private val addressService = BitcoinCashAddressService()
+
+ @Test
+ fun makeAddressFromCorrectPublicKey() {
+ val walletPublicKey = "04BE37CD5251C8999EDBBFC759D800EB41E4DCB718289601EB15819404E1B2F2ED90FE50C2A481D06EC790D1EF6184974EB655ABAE4BE56A6D1C9E1A17B1EFDF02".hexToBytes()
+ val expected = "bitcoincash:qp7atyzvetwq8a0x02y2snvnns5jfwnzacf9vfa4x3"
+
+ Truth.assertThat(addressService.makeAddress(walletPublicKey.toCompressedPublicKey()))
+ .isEqualTo(expected)
+ }
+
+ @Test
+ fun validateCorrectAddress() {
+ val address = "bitcoincash:qp7atyzvetwq8a0x02y2snvnns5jfwnzacf9vfa4x3"
+ Truth.assertThat(addressService.validate(address))
+ .isTrue()
+ }
+}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/ethereum/EthereumAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressTest.kt
similarity index 51%
rename from blockchain/src/test/java/com/tangem/blockchain/ethereum/EthereumAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressTest.kt
index b1325c8493..b4892fb1d4 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/ethereum/EthereumAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressTest.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.ethereum
+package com.tangem.blockchain.blockchains.ethereum
import com.google.common.truth.Truth
import com.tangem.common.extensions.hexToBytes
@@ -6,19 +6,28 @@ import org.junit.Test
internal class EthereumAddressTest {
+ private val addressService = EthereumAddressService()
+
@Test
fun makeAddressFromCorrectPublicKey() {
val walletPublicKey = "04BAEC8CD3BA50FDFE1E8CF2B04B58E17041245341CD1F1C6B3A496B48956DB4C896A6848BCF8FCFC33B88341507DD25E5F4609386C68086C74CF472B86E5C3820".hexToBytes()
- val expected = "0xc63763572d45171e4c25ca0818b44e5dd7f5c15b"
+ val expected = "0xc63763572D45171e4C25cA0818b44E5Dd7F5c15B"
- Truth.assertThat(EthereumAddressFactory.makeAddress(walletPublicKey))
+ Truth.assertThat(addressService.makeAddress(walletPublicKey))
.isEqualTo(expected)
}
@Test
fun validateCorrectAddress() {
val address = "0xc63763572d45171e4c25ca0818b44e5dd7f5c15b"
- Truth.assertThat(EthereumAddressValidator.validate(address))
+ Truth.assertThat(addressService.validate(address))
+ .isTrue()
+ }
+
+ @Test
+ fun validateCorrectAddressWithChecksum() {
+ val address = "0xc63763572D45171e4C25cA0818b44E5Dd7F5c15B"
+ Truth.assertThat(addressService.validate(address))
.isTrue()
}
}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/stellar/StellarAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/stellar/StellarAddressTest.kt
similarity index 71%
rename from blockchain/src/test/java/com/tangem/blockchain/stellar/StellarAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/stellar/StellarAddressTest.kt
index 5c6f18561f..e53d557e53 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/stellar/StellarAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/stellar/StellarAddressTest.kt
@@ -1,23 +1,26 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
import com.google.common.truth.Truth
import com.tangem.common.extensions.hexToBytes
import org.junit.Test
internal class StellarAddressTest {
+
+ private val addressService = StellarAddressService()
+
@Test
fun makeAddressFromCorrectPublicKey() {
val walletPublicKey = "EC5387D8B38BD9EF80BDBC78D0D7E1C53F08E269436C99D5B3C2DF4B2CE73012".hexToBytes()
val expected = "GDWFHB6YWOF5T34AXW6HRUGX4HCT6CHCNFBWZGOVWPBN6SZM44YBFUDZ"
- Truth.assertThat(StellarAddressFactory.makeAddress(walletPublicKey))
+ Truth.assertThat(addressService.makeAddress(walletPublicKey))
.isEqualTo(expected)
}
@Test
fun validateCorrectAddress() {
val address = "GDWFHB6YWOF5T34AXW6HRUGX4HCT6CHCNFBWZGOVWPBN6SZM44YBFUDZ"
- Truth.assertThat(StellarAddressValidator.validate(address))
+ Truth.assertThat(addressService.validate(address))
.isTrue()
}
}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/xrp/XrpAddressTest.kt
similarity index 74%
rename from blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/xrp/XrpAddressTest.kt
index 1f82c1f777..a6d2f97a91 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/xrp/XrpAddressTest.kt
@@ -1,16 +1,19 @@
-package com.tangem.blockchain.xrp
+package com.tangem.blockchain.blockchains.xrp
import com.google.common.truth.Truth
import com.tangem.common.extensions.hexToBytes
import org.junit.Test
internal class XrpAddressTest {
+
+ private val addressService = XrpAddressService()
+
@Test
fun makeAddressFromCorrectSecpPublicKey() {
val walletPublicKey = "04D2B9FB288540D54E5B32ECAF0381CD571F97F6F1ECD036B66BB11AA52FFE9981110D883080E2E255C6B1640586F7765E6FAA325D1340F49B56B83D9DE56BC7ED".hexToBytes()
val expected = "rNxCXgKaCMAmowENKnYa5r8Ue78rjgrM6B"
- Truth.assertThat(XrpAddressFactory.makeAddress(walletPublicKey))
+ Truth.assertThat(addressService.makeAddress(walletPublicKey))
.isEqualTo(expected)
}
@@ -19,14 +22,14 @@ internal class XrpAddressTest {
val walletPublicKey = "12CC4DE73BACF875D7423D152E46C1A665F1718CBE7CA0FEB2BA28C149E11909".hexToBytes()
val expected = "rwWMNBs2GtJwfX7YNVV1sUYaPy6DRmDHB4"
- Truth.assertThat(XrpAddressFactory.makeAddress(walletPublicKey))
+ Truth.assertThat(addressService.makeAddress(walletPublicKey))
.isEqualTo(expected)
}
@Test
fun validateCorrectAddress() {
val address = "rwWMNBs2GtJwfX7YNVV1sUYaPy6DRmDHB4"
- Truth.assertThat(XrpAddressValidator.validate(address))
+ Truth.assertThat(addressService.validate(address))
.isTrue()
}
}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt
index 32ab0256cb..ff9edbcdd1 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt
@@ -2,12 +2,13 @@ package com.tangem.blockchain.common
import com.google.common.truth.Truth
import com.tangem.SessionEnvironment
-import com.tangem.blockchain.binance.BinanceWalletManager
-import com.tangem.blockchain.bitcoin.BitcoinWalletManager
-import com.tangem.blockchain.cardano.CardanoWalletManager
-import com.tangem.blockchain.ethereum.EthereumWalletManager
-import com.tangem.blockchain.stellar.StellarWalletManager
-import com.tangem.blockchain.xrp.XrpWalletManager
+import com.tangem.blockchain.blockchains.binance.BinanceWalletManager
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinWalletManager
+import com.tangem.blockchain.blockchains.bitcoincash.BitcoinCashWalletManager
+import com.tangem.blockchain.blockchains.cardano.CardanoWalletManager
+import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager
+import com.tangem.blockchain.blockchains.stellar.StellarWalletManager
+import com.tangem.blockchain.blockchains.xrp.XrpWalletManager
import com.tangem.commands.ReadCommand
import com.tangem.common.apdu.ResponseApdu
import com.tangem.common.extensions.hexToBytes
@@ -80,4 +81,15 @@ internal class WalletManagerFactoryTest {
Truth.assertThat(walletManager)
.isInstanceOf(BinanceWalletManager::class.java)
}
+
+ @Test
+ fun createBitcoinCashWalletManager() {
+ val data = "0108BB00000000000049200754414E47454D00020102800A322E3432642053444B00034104766A1586D164B436E5D420AED01FDAB41B2AE7EDF0C865D7AF1DA995D70AB297E5B94B761CFBB405084C21BC97C02B4A1EA9ED4F515576EAB4D83AD3A0DFAA8A0A04041E76310C618102FFFF8A0101820407E4041B830B54414E47454D2053444B00840342434886408058F0F628C2466B09ECEB13F2A8EFDD4558F5D2DBDA9BD0628EE8C8CC99A778FF0F1AECD35704B9F3518486EA5C1D20F9DFCBAA66184F4CCCD9282E2632882C3041045F16BD1D2EAFE463E62A335A09E6B2BBCBD04452526885CB679FC4D27AF1BD22F553C7DEEFB54FD3D4F361D14E6DC3F11B7D4EA183250A60720EBDF9E110CD26050A736563703235366B31000804000186A0070100604104BE37CD5251C8999EDBBFC759D800EB41E4DCB718289601EB15819404E1B2F2ED90FE50C2A481D06EC790D1EF6184974EB655ABAE4BE56A6D1C9E1A17B1EFDF0262040001869A6304000000060F01009000"
+ val responseApdu = ResponseApdu(data.hexToBytes())
+ val card = ReadCommand().deserialize(SessionEnvironment(), responseApdu)
+ val walletManager = WalletManagerFactory.makeWalletManager(card!!)
+
+ Truth.assertThat(walletManager)
+ .isInstanceOf(BitcoinCashWalletManager::class.java)
+ }
}
\ No newline at end of file
diff --git a/dependencies.gradle b/dependencies.gradle
index 030d85bfd8..3c7aaf12d8 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -1,4 +1,4 @@
ext.versions = [
kotlin : '1.3.72',
- build_gradle: '3.6.2',
+ build_gradle: '3.6.3',
]
diff --git a/settings.gradle b/settings.gradle
index db8941d8f2..9a87107347 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':tangem-sdk-old', ':server-android', ':tangem-card-old', ':tangem-core', ':tangem-sdk', ':tangem-demo', ':blockchain', ':blockchain-demo'
\ No newline at end of file
+include ':app', ':tangem-sdk-old', ':server-android', ':tangem-card-old', ':tangem-core', ':tangem-sdk', ':tangem-devkit', ':blockchain', ':blockchain-demo'
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/CardFilter.kt b/tangem-core/src/main/java/com/tangem/CardFilter.kt
new file mode 100644
index 0000000000..d1275d1d1d
--- /dev/null
+++ b/tangem-core/src/main/java/com/tangem/CardFilter.kt
@@ -0,0 +1,14 @@
+package com.tangem
+
+import com.tangem.common.extensions.CardType
+import java.util.*
+
+/**
+ * Filter that can be used to limit cards that can be interacted with in TangemSdk.
+ *
+ * @property allowedCardTypes Type of cards that are allowed to be interacted with in TangemSdk.
+ */
+data class CardFilter(
+
+ var allowedCardTypes: EnumSet = EnumSet.allOf(CardType::class.java)
+)
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/CardSession.kt b/tangem-core/src/main/java/com/tangem/CardSession.kt
index 450c056997..e2cbafb179 100644
--- a/tangem-core/src/main/java/com/tangem/CardSession.kt
+++ b/tangem-core/src/main/java/com/tangem/CardSession.kt
@@ -8,6 +8,7 @@ import com.tangem.common.CompletionResult
import com.tangem.common.apdu.CommandApdu
import com.tangem.common.apdu.ResponseApdu
import com.tangem.common.extensions.calculateSha256
+import com.tangem.common.extensions.getType
import com.tangem.crypto.EncryptionHelper
import com.tangem.crypto.FastEncryptionHelper
import com.tangem.crypto.StrongEncryptionHelper
@@ -20,7 +21,7 @@ interface CardSessionRunnable {
/**
* The starting point for custom business logic.
- * Implement this interface and use [TangemSdk.startSession] to run.
+ * Implement this interface and use [TangemSdk.startSessionWithRunnable] to run.
* @param session run commands in this [CardSession].
* @param callback trigger the callback to complete the task.
*/
@@ -136,6 +137,12 @@ class CardSession(
callback(CompletionResult.Failure(SessionError.WrongCard()))
return@run
}
+ val allowedCardTypes = environment.cardFilter.allowedCardTypes
+ if (!allowedCardTypes.contains(result.data.getType())) {
+ stopWithError(SessionError.WrongCardType())
+ callback(CompletionResult.Failure(SessionError.WrongCardType()))
+ return@run
+ }
environment.card = result.data
cardId = receivedCardId
callback(CompletionResult.Success(result.data))
diff --git a/tangem-core/src/main/java/com/tangem/Config.kt b/tangem-core/src/main/java/com/tangem/Config.kt
index d99c57fcf9..20c5c849bd 100644
--- a/tangem-core/src/main/java/com/tangem/Config.kt
+++ b/tangem-core/src/main/java/com/tangem/Config.kt
@@ -18,16 +18,21 @@ class Config(
the correctness of Terminal_Transaction_Signature using previously stored Terminal_PublicKey
and, if correct, will skip security delay for the current SIGN operation.
*/
- val linkedTerminal: Boolean = true,
+ var linkedTerminal: Boolean = true,
/**
* If not null, it will be used to validate Issuer data and issuer extra data.
* If null, issuerPublicKey from current card will be used.
*/
- val issuerPublicKey: ByteArray? = null,
+ var issuerPublicKey: ByteArray? = null,
/**
* Level of encryption used in communication with a Tangem Card.
*/
- val encryptionMode: EncryptionMode = EncryptionMode.NONE
+ var encryptionMode: EncryptionMode = EncryptionMode.NONE,
+
+ /**
+ * Filter that can be used to limit cards that can be interacted with in TangemSdk.
+ */
+ val cardFilter: CardFilter = CardFilter()
)
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/SessionEnvironment.kt b/tangem-core/src/main/java/com/tangem/SessionEnvironment.kt
index 0dabbc74d6..c1c9a296b2 100644
--- a/tangem-core/src/main/java/com/tangem/SessionEnvironment.kt
+++ b/tangem-core/src/main/java/com/tangem/SessionEnvironment.kt
@@ -20,7 +20,8 @@ data class SessionEnvironment(
val terminalKeys: KeyPair? = null,
var encryptionMode: EncryptionMode = EncryptionMode.NONE,
var encryptionKey: ByteArray? = null,
- val cvc: ByteArray? = null
+ val cvc: ByteArray? = null,
+ var cardFilter: CardFilter = CardFilter()
) {
fun setPin1(pin1: String) {
diff --git a/tangem-core/src/main/java/com/tangem/SessionError.kt b/tangem-core/src/main/java/com/tangem/SessionError.kt
index 07209b6a3f..b5f702ceb2 100644
--- a/tangem-core/src/main/java/com/tangem/SessionError.kt
+++ b/tangem-core/src/main/java/com/tangem/SessionError.kt
@@ -106,6 +106,13 @@ sealed class SessionError(val code: Int) : Exception() {
*/
class HashSizeMustBeEqual : SessionError(3005)
+
+ /**
+ * This error is returned when a user scans a card of a [com.tangem.common.extensions.CardType]
+ * that is not specified in [Config.allowedCards].
+ */
+ class WrongCardType : SessionError(3006)
+
/**
* This error is returned when [com.tangem.TangemSdk] was called with a new [Task],
* while a previous [Task] is still in progress.
diff --git a/tangem-core/src/main/java/com/tangem/TangemSdk.kt b/tangem-core/src/main/java/com/tangem/TangemSdk.kt
index 145efc088e..a5f90dc0ca 100644
--- a/tangem-core/src/main/java/com/tangem/TangemSdk.kt
+++ b/tangem-core/src/main/java/com/tangem/TangemSdk.kt
@@ -49,7 +49,7 @@ class TangemSdk(
* in the form of [Card] if the task was performed successfully or [SessionError] in case of an error.
*/
fun scanCard(initialMessage: Message? = null, callback: (result: CompletionResult) -> Unit) {
- startSession(ScanTask(), null, initialMessage, callback)
+ startSessionWithRunnable(ScanTask(), null, initialMessage, callback)
}
/**
@@ -72,7 +72,7 @@ class TangemSdk(
*/
fun sign(hashes: Array, cardId: String, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
- startSession(SignCommand(hashes), cardId, initialMessage, callback)
+ startSessionWithRunnable(SignCommand(hashes), cardId, initialMessage, callback)
}
/**
@@ -90,7 +90,7 @@ class TangemSdk(
*/
fun readIssuerData(cardId: String, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
- startSession(ReadIssuerDataCommand(config.issuerPublicKey), cardId, initialMessage, callback)
+ startSessionWithRunnable(ReadIssuerDataCommand(config.issuerPublicKey), cardId, initialMessage, callback)
}
/**
@@ -109,7 +109,7 @@ class TangemSdk(
*/
fun readIssuerExtraData(cardId: String,
callback: (result: CompletionResult) -> Unit) {
- startSession(ReadIssuerExtraDataCommand(config.issuerPublicKey), cardId, null, callback)
+ startSessionWithRunnable(ReadIssuerExtraDataCommand(config.issuerPublicKey), cardId, null, callback)
}
/**
@@ -140,7 +140,7 @@ class TangemSdk(
issuerDataCounter,
config.issuerPublicKey
)
- startSession(command, cardId, initialMessage, callback)
+ startSessionWithRunnable(command, cardId, initialMessage, callback)
}
/**
@@ -179,7 +179,7 @@ class TangemSdk(
issuerDataCounter,
config.issuerPublicKey
)
- startSession(command, cardId, initialMessage, callback)
+ startSessionWithRunnable(command, cardId, initialMessage, callback)
}
/**
@@ -206,7 +206,7 @@ class TangemSdk(
callback: (result: CompletionResult) -> Unit
) {
val command = WriteUserDataCommand(userData, userProtectedData, userCounter, userProtectedCounter)
- startSession(command, cardId, initialMessage, callback)
+ startSessionWithRunnable(command, cardId, initialMessage, callback)
}
/**
@@ -228,7 +228,7 @@ class TangemSdk(
*/
fun readUserData(cardId: String, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
- startSession(ReadUserDataCommand(), cardId, initialMessage, callback)
+ startSessionWithRunnable(ReadUserDataCommand(), cardId, initialMessage, callback)
}
/**
@@ -250,7 +250,7 @@ class TangemSdk(
*/
fun createWallet(cardId: String, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
- startSession(CreateWalletTask(), cardId, initialMessage, callback)
+ startSessionWithRunnable(CreateWalletTask(), cardId, initialMessage, callback)
}
/**
@@ -269,7 +269,7 @@ class TangemSdk(
*/
fun purgeWallet(cardId: String, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
- startSession(PurgeWalletCommand(), cardId, initialMessage, callback)
+ startSessionWithRunnable(PurgeWalletCommand(), cardId, initialMessage, callback)
}
/**
@@ -287,7 +287,7 @@ class TangemSdk(
* */
fun depersonalize(cardId: String, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
- startSession(DepersonalizeCommand(), cardId, initialMessage, callback)
+ startSessionWithRunnable(DepersonalizeCommand(), cardId, initialMessage, callback)
}
/**
@@ -313,7 +313,7 @@ class TangemSdk(
initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
val command = PersonalizeCommand(config, issuer, manufacturer, acquirer)
- startSession(command, null, initialMessage, callback)
+ startSessionWithRunnable(command, null, initialMessage, callback)
}
/**
@@ -330,7 +330,7 @@ class TangemSdk(
* If null, default message will be used.
* @callback: Standard [TangemSdk] callback.
*/
- fun startSession(
+ fun startSessionWithRunnable(
runnable: CardSessionRunnable, cardId: String? = null, initialMessage: Message? = null,
callback: (result: CompletionResult) -> Unit) {
val cardSession = CardSession(buildEnvironment(), reader, viewDelegate, cardId, initialMessage)
@@ -349,8 +349,7 @@ class TangemSdk(
* @callback: At first, you should check that the [SessionError] is not null,
* then you can use the [CardSession] to interact with a card.
*/
- fun startSession(
- cardId: String? = null, initialMessage: Message? = null,
+ fun startSession(cardId: String? = null, initialMessage: Message? = null,
callback: (session: CardSession, error: SessionError?) -> Unit) {
val cardSession = CardSession(buildEnvironment(), reader, viewDelegate, cardId, initialMessage)
Thread().run { cardSession.start(callback) }
@@ -367,7 +366,8 @@ class TangemSdk(
private fun buildEnvironment(): SessionEnvironment {
val terminalKeys = if (config.linkedTerminal) terminalKeysService?.getKeys() else null
return SessionEnvironment(
- terminalKeys = terminalKeys
+ terminalKeys = terminalKeys,
+ cardFilter = config.cardFilter
)
}
diff --git a/tangem-core/src/main/java/com/tangem/commands/ReadIssuerExtraDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/ReadIssuerExtraDataCommand.kt
index 4140000621..db748d8ec5 100644
--- a/tangem-core/src/main/java/com/tangem/commands/ReadIssuerExtraDataCommand.kt
+++ b/tangem-core/src/main/java/com/tangem/commands/ReadIssuerExtraDataCommand.kt
@@ -44,7 +44,7 @@ class ReadIssuerExtraDataResponse(
val issuerDataSignature: ByteArray?,
/**
- * An optional counter that protect issuer data against replay attack.
+ * An optional counter that protects issuer data against replay attack.
* When flag [Settings.ProtectIssuerDataAgainstReplay] set in [SettingsMask]
* then this value is mandatory and must increase on each execution of [WriteIssuerDataCommand].
*/
diff --git a/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt b/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt
index e9771d0b87..7b43e879e7 100644
--- a/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt
+++ b/tangem-core/src/main/java/com/tangem/commands/WriteUserDataCommand.kt
@@ -17,7 +17,7 @@ class WriteUserDataResponse(
) : CommandResponse
/**
- * This command write some of User_Data, User_ProtectedData, User_Counter and User_ProtectedCounter fields.
+ * This command writes to the card any of User_Data, User_ProtectedData, User_Counter and User_ProtectedCounter fields.
* User_Data and User_ProtectedData are never changed or parsed by the executable code the Tangem COS.
* The App defines purpose of use, format and it's payload. For example, this field may contain cashed information
* from blockchain to accelerate preparing new transaction.
diff --git a/tangem-core/src/main/java/com/tangem/commands/personalization/entities/CardConfig.kt b/tangem-core/src/main/java/com/tangem/commands/personalization/entities/CardConfig.kt
index 2cfd173be1..4417374a87 100644
--- a/tangem-core/src/main/java/com/tangem/commands/personalization/entities/CardConfig.kt
+++ b/tangem-core/src/main/java/com/tangem/commands/personalization/entities/CardConfig.kt
@@ -12,6 +12,7 @@ data class NdefRecord(
URI, AAR, TEXT
}
+ @delegate:Transient
val valueInBytes: ByteArray by lazy { value.toByteArray() }
}
diff --git a/tangem-core/src/main/java/com/tangem/common/extensions/BigDecimal.kt b/tangem-core/src/main/java/com/tangem/common/extensions/BigDecimal.kt
new file mode 100644
index 0000000000..6d23ffee09
--- /dev/null
+++ b/tangem-core/src/main/java/com/tangem/common/extensions/BigDecimal.kt
@@ -0,0 +1,7 @@
+package com.tangem.common.extensions
+
+import java.math.BigDecimal
+
+fun BigDecimal.isZero() : Boolean {
+ return this.compareTo(BigDecimal.ZERO) == 0
+}
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/common/extensions/Card.kt b/tangem-core/src/main/java/com/tangem/common/extensions/Card.kt
new file mode 100644
index 0000000000..97243f3655
--- /dev/null
+++ b/tangem-core/src/main/java/com/tangem/common/extensions/Card.kt
@@ -0,0 +1,22 @@
+package com.tangem.common.extensions
+
+import com.tangem.commands.Card
+
+fun Card.getType(): CardType {
+ val firmware = this.firmwareVersion ?: return CardType.Unknown
+ return when {
+ firmware.endsWith("d SDK") -> {
+ CardType.Sdk
+ }
+ firmware.endsWith("r") -> {
+ CardType.Release
+ }
+ else -> {
+ CardType.Unknown
+ }
+ }
+}
+
+enum class CardType {
+ Sdk, Release, Unknown
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/Ids.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/Ids.kt
deleted file mode 100644
index 5e517808f2..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/Ids.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.tangem.tangemtest._arch.structure
-
-/**
-[REDACTED_AUTHOR]
- */
-interface Id
-
-class StringId(val value: String) : Id
-
-class StringResId(val value: Int) : Id
-
-enum class Additional : Id {
- UNDEFINED,
- JSON_INCOMING,
- JSON_OUTGOING,
- JSON_TAILS,
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/ItemWidgetBuilder.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/ItemWidgetBuilder.kt
deleted file mode 100644
index 2ed1e1ab8f..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/ItemWidgetBuilder.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.tangem.tangemtest._arch.widget
-
-import android.view.ViewGroup
-import com.tangem.tangemtest._arch.structure.abstraction.BaseItem
-import com.tangem.tangemtest._arch.widget.abstraction.ViewWidget
-
-/**
-[REDACTED_AUTHOR]
- */
-interface ItemWidgetBuilder {
- fun build(item: BaseItem, parent: ViewGroup): ViewWidget?
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/impl/StubWidget.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/impl/StubWidget.kt
deleted file mode 100644
index 1b832e362a..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/impl/StubWidget.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.tangem.tangemtest._arch.widget.impl
-
-import android.view.ViewGroup
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.abstraction.BaseItem
-import com.tangem.tangemtest._arch.structure.abstraction.BaseItemViewModel
-import com.tangem.tangemtest._arch.widget.abstraction.BaseViewWidget
-
-/**
-[REDACTED_AUTHOR]
- */
-class StubWidget(id: Id, parent: ViewGroup) : BaseViewWidget(parent, BaseItem(id, BaseItemViewModel())) {
- override fun getLayoutId(): Int = R.layout.w_empty
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/CardConfig.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/CardConfig.kt
deleted file mode 100644
index ab8c84334b..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/CardConfig.kt
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.tangem.tangemtest.extensions
-
-import android.app.Application
-import android.content.Context
-import com.tangem.commands.*
-import com.tangem.commands.personalization.entities.CardConfig
-import com.tangem.commands.personalization.entities.NdefRecord
-import java.util.*
-
-fun CardConfig.Companion.create(application: Application): CardConfig {
-
- val preferences = application.getSharedPreferences("prefs", Context.MODE_PRIVATE)
-
- val signingMethodMaskBuilder = SigningMethodMaskBuilder()
- if (preferences.getBoolean("personalization_SigningMethod_0", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignHash)
- }
- if (preferences.getBoolean("personalization_SigningMethod_1", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignRaw)
- }
- if (preferences.getBoolean("personalization_SigningMethod_2", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignHashValidateByIssuer)
- }
- if (preferences.getBoolean("personalization_SigningMethod_3", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignRawValidateByIssuer)
- }
- if (preferences.getBoolean("personalization_SigningMethod_4", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignHashValidateByIssuerWriteIssuerData)
- }
- if (preferences.getBoolean("personalization_SigningMethod_5", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignRawValidateByIssuerWriteIssuerData)
- }
- if (preferences.getBoolean("personalization_SigningMethod_6", false)) {
- signingMethodMaskBuilder.add(SigningMethod.SignHash)
- }
- val signingMethod = signingMethodMaskBuilder.build()
-
- val isNote = preferences.getBoolean("personalization_ProductMask_IsNote", true)
- val isTag = preferences.getBoolean("personalization_ProductMask_IsTag", false)
- val isIdCard = preferences.getBoolean("personalization_ProductMask_IsIDCard", false)
-
- val productMaskBuilder = ProductMaskBuilder()
- if (isNote) productMaskBuilder.add(Product.Note)
- if (isTag) productMaskBuilder.add(Product.Tag)
- if (isIdCard) productMaskBuilder.add(Product.IdCard)
- val productMask = productMaskBuilder.build()
-
- var tokenSymbol: String? = null
- var tokenContractAddress: String? = null
- var tokenDecimal: Int? = null
- if (preferences.getBoolean("personalization_isToken", false)) {
- tokenSymbol = preferences.getString("personalization_token_symbol", "")
- tokenContractAddress = preferences.getString("personalization_token_contract_address", "")
- tokenDecimal = preferences.getString("personalization_token_decimal", "")!!.toInt()
- }
-
- val cardData = CardData(
- blockchainName = preferences.getString("personalization_Blockchain", "BTC"),
- batchId = preferences.getString("personalization_card_batch", "FFFF"),
- productMask = productMask,
- tokenSymbol = tokenSymbol,
- tokenContractAddress = tokenContractAddress,
- tokenDecimal = tokenDecimal,
- issuerName = null,
- manufactureDateTime = Calendar.getInstance().time,
- manufacturerSignature = null)
-
-
- val ndefAar = preferences.getString("personalization_NDEF_AAR", "Release APP")
- val ndefUri = preferences.getString("personalization_NDEF_URI", "https://tangem.com")
-
- val ndefs = mutableListOf()
- if (!ndefUri.isNullOrEmpty()) {
- ndefs.add(NdefRecord(NdefRecord.Type.URI, ndefUri))
- }
- if (ndefAar != "None") {
- val type = NdefRecord.Type.AAR
- val value = when (ndefAar) {
- "Debug APP" -> {
- "com.tangem.wallet.debug"
- }
- "Release APP" -> {
- "com.tangem.wallet"
- }
- "--- CUSTOM ---" -> {
- preferences.getString("personalization_NDEF_CUSTOM_AAR", "com.tangem.wallet")!!
- }
- else -> ""
- }
- ndefs.add(NdefRecord(type, value))
- }
-
- return CardConfig(
- cardData = cardData,
- curveID = EllipticCurve.byName(preferences.getString("personalization_CurveId", "secp256k1")!!)
- ?: EllipticCurve.Secp256k1,
- signingMethods = signingMethod,
- createWallet = preferences.getBoolean("personalization_CreateWallet", true),
- maxSignatures = preferences.getString("personalization_MaxSignatures", "1000")!!.toInt(),
- isReusable = preferences.getBoolean("personalization_SettingsMask_IsReusable", true),
- protocolAllowUnencrypted = preferences.getBoolean("personalization_SettingsMask_AllowEncryption_None", true),
- protocolAllowStaticEncryption = preferences.getBoolean("personalization_SettingsMask_AllowEncryption_Fast", true),
- useActivation = preferences.getBoolean("personalization_SettingsMask_NeedActivation", false),
-
- useOneCommandAtTime = preferences.getBoolean("personalization_SettingsMask_OneApduAtOnce", false),
- useCvc = preferences.getBoolean("personalization_SettingsMask_UseCVC", false),
- useBlock = preferences.getBoolean("personalization_SettingsMask_UseBlock", false),
- allowSwapPin = preferences.getBoolean("personalization_SettingsMask_AllowSwapPIN", true),
- allowSwapPin2 = preferences.getBoolean("personalization_SettingsMask_AllowSwapPIN2", true),
- useNdef = preferences.getBoolean("personalization_SettingsMask_UseNDEF", true),
- useDynamicNdef = preferences.getBoolean("personalization_SettingsMask_UseDynamicNDEF", true),
- protectIssuerDataAgainstReplay = preferences.getBoolean("personalization_SettingsMask_ProtectIssuerDataAgainstReplay", true),
- forbidDefaultPin = preferences.getBoolean("personalization_SettingsMask_ForbidDefaultPIN", false),
- smartSecurityDelay = preferences.getBoolean("personalization_SettingsMask_SmartSecurityDelay", false),
- pauseBeforePin2 = preferences.getString("personalization_PauseBeforePIN2", "15")!!.toInt() * 1000,
- allowSelectBlockchain = preferences.getBoolean("personalization_SettingsMask_AllowSelectBlockchain", false),
- forbidPurgeWallet = preferences.getBoolean("personalization_SettingsMask_ForbidPurgeWallet", false)
- ?: false,
- disablePrecomputedNdef = preferences.getBoolean("personalization_SettingsMask_DisablePrecomputedNDEF", false)
- ?: false,
- skipSecurityDelayIfValidatedByIssuer = preferences.getBoolean("personalization_SettingsMask_SkipSecurityDelayIfValidatedByIssuer", true),
- skipCheckPIN2andCVCIfValidatedByIssuer = preferences.getBoolean("personalization_SettingsMask_SkipCheckPIN2andCVCIfValidatedByIssuer", true),
-
- skipSecurityDelayIfValidatedByLinkedTerminal = preferences.getBoolean("personalization_SettingsMask_SkipSecurityDelayIfValidatedByLinkedTerminal", true),
- restrictOverwriteIssuerDataEx = preferences.getBoolean("personalization_SettingsMask_RestrictOverwriteIssuerDataEx", true),
-
- requireTerminalTxSignature = preferences.getBoolean("personalization_SettingsMask_RequireTerminalTxSignature", false),
- requireTerminalCertSignature = preferences.getBoolean("personalization_SettingsMask_RequireTerminalCertSignature", false),
- checkPin3onCard = preferences.getBoolean("personalization_SettingsMask_CheckPIN3onCard", true),
-
- cvc = preferences.getString("personalization_cvc", "000") ?: "000",
- pin = preferences.getString("personalization_pin", "000000") ?: "000000",
- pin2 = preferences.getString("personalization_pin2", "000") ?: "000",
- pin3 = preferences.getString("personalization_pin3", "123") ?: "123",
- hexCrExKey = preferences.getString("personalization_CrEx_Key", "00112233445566778899AABBCCDDEEFFFFEEDDCCBBAA998877665544332211000000111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEEFFFF"),
-
- ndefRecords = ndefs
- )
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/PersonalizeAction.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/PersonalizeAction.kt
deleted file mode 100644
index 457b4baac3..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/PersonalizeAction.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.tangem.tangemtest.ucase.domain.actions
-
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.findItem
-import com.tangem.tangemtest._arch.structure.impl.EditTextItem
-import com.tangem.tangemtest._arch.structure.impl.NumberItem
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.domain.paramsManager.PayloadKey
-import com.tangem.tangemtest.ucase.tunnel.ActionView
-import com.tangem.tangemtest.ucase.tunnel.ItemError
-import com.tangem.tangemtest.ucase.variants.personalize.CardNumber
-import com.tangem.tangemtest.ucase.variants.personalize.converter.PersonalizationConfigConverter
-import com.tangem.tangemtest.ucase.variants.personalize.converter.PersonalizationConfigToCardConfig
-import com.tangem.tangemtest.ucase.variants.personalize.dto.DefaultPersonalizationParams
-import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizationConfig
-import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
-
-/**
-[REDACTED_AUTHOR]
- */
-class PersonalizeAction : BaseAction() {
- override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
- val itemList = attrs.payload[PayloadKey.itemList] as? List- ?: return
- val actionView = attrs.payload[PayloadKey.actionView] as? ActionView ?: return
-
- if (!checkSeries(itemList)) {
- actionView.showSnackbar(ItemError.BadSeries)
- return
- }
- if (!checkNumber(itemList)) {
- actionView.showSnackbar(ItemError.BadCardNumber)
- return
- }
-
- val issuer = DefaultPersonalizationParams.issuer()
- val acquirer = DefaultPersonalizationParams.acquirer()
- val manufacturer = DefaultPersonalizationParams.manufacturer()
-
- val personalizeConfig = PersonalizationConfigConverter().convert(itemList, PersonalizationConfig.default())
- val cardConfig = PersonalizationConfigToCardConfig().convert(personalizeConfig)
-
- attrs.tangemSdk.personalize(cardConfig, issuer, manufacturer, acquirer) {
- handleResult(payload, it, null, attrs, callback)
- }
- }
-
- private fun checkSeries(itemList: List
- ): Boolean {
- val seriesItem = itemList.findItem(CardNumber.Series) as? EditTextItem ?: return false
- val data = seriesItem.getData() as? String ?: return false
-
- seriesItem.setData(data.toUpperCase())
- return data.length == 2 || data.length == 4
- }
-
- private fun checkNumber(itemList: List
- ): Boolean {
- val seriesItem = itemList.findItem(CardNumber.Series) as? EditTextItem ?: return false
- val numberItem = itemList.findItem(CardNumber.Number) as? NumberItem ?: return false
- val seriesData = seriesItem.getData() as? String ?: return false
- val numberData = stringOf(numberItem.getData() as? Number)
-
- return if (seriesData.length == 2 && numberData.length > 13) false
- else !(seriesData.length == 4 && numberData.length > 11)
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt
deleted file mode 100644
index 4a9c0b0572..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager.managers
-
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.OnLifecycleEvent
-import com.tangem.TangemSdk
-import com.tangem.tangemtest.commons.Store
-import com.tangem.tangemtest.ucase.domain.actions.PersonalizeAction
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.variants.personalize.converter.PersonalizationConfigConverter
-import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizationConfig
-
-/**
-[REDACTED_AUTHOR]
- */
-class PersonalizationItemsManager(
- private val store: Store
-) : BaseItemsManager(PersonalizeAction()) {
-
- private val converter = PersonalizationConfigConverter()
-
- init {
- val config = store.restore()
- setItems(converter.convert(config))
- }
-
- override fun invokeMainAction(tangemSdk: TangemSdk, callback: ActionCallback) {
- action.executeMainAction(this, getAttrsForAction(tangemSdk), callback)
- }
-
- @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
- fun onDestroy() {
- val config = converter.convert(itemList, PersonalizationConfig.default())
- store.save(config)
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SimpleManagers.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SimpleManagers.kt
deleted file mode 100644
index c892b6761b..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SimpleManagers.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager.managers
-
-import com.tangem.tangemtest._arch.structure.impl.EditTextItem
-import com.tangem.tangemtest.ucase.domain.actions.DepersonalizeAction
-import com.tangem.tangemtest.ucase.domain.actions.ScanAction
-import com.tangem.tangemtest.ucase.domain.actions.SignAction
-import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.SignScanConsequence
-import com.tangem.tangemtest.ucase.variants.TlvId
-
-/**
-[REDACTED_AUTHOR]
- */
-class ScanItemsManager : BaseItemsManager(ScanAction())
-
-class DepersonalizeItemsManager : BaseItemsManager(DepersonalizeAction()) {
-
- init {
- setItems(listOf(EditTextItem(TlvId.CardId, null)))
- }
-}
-
-class SignItemsManager : BaseItemsManager(SignAction()) {
-
- init {
- setItemChangeConsequences(SignScanConsequence())
- setItems(listOf(
- EditTextItem(TlvId.CardId, null),
- EditTextItem(TlvId.TransactionOutHash, "Data used for hashing")
- ))
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/changeConsequence/ParamChangeConsequence.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/changeConsequence/ParamChangeConsequence.kt
deleted file mode 100644
index bb771e86f6..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/changeConsequence/ParamChangeConsequence.kt
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence
-
-import com.tangem.commands.Card
-import com.tangem.commands.EllipticCurve
-import com.tangem.common.extensions.calculateSha256
-import com.tangem.common.extensions.calculateSha512
-import com.tangem.common.extensions.toHexString
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.findItem
-import com.tangem.tangemtest.ucase.domain.paramsManager.PayloadKey
-import com.tangem.tangemtest.ucase.tunnel.ActionView
-import com.tangem.tangemtest.ucase.variants.TlvId
-import ru.dev.gbixahue.eu4d.lib.android.global.threading.postUI
-
-/**
-[REDACTED_AUTHOR]
- *
- * The ParamsChangeConsequence class family modifies parameters depending on the state
- * of the incoming parameter
- */
-interface ItemsChangeConsequence {
- fun affectChanges(payload: PayloadHolder, changedItem: Item, itemList: List
- ): List
- ?
-}
-
-class SignScanConsequence : ItemsChangeConsequence {
-
- override fun affectChanges(payload: PayloadHolder, changedItem: Item, itemList: List
- ): List
- ? {
- if (changedItem.id != TlvId.CardId) return null
-
- val hashItem = itemList.findItem(TlvId.TransactionOutHash) ?: return null
- val affectedItems = mutableListOf(hashItem)
- val card = payload.remove(PayloadKey.card) as Card?
- if (card == null) {
- hashItem.restoreDefaultData()
- postUI { (payload.get(PayloadKey.actionView) as? ActionView)?.enableActionFab(false) }
- } else {
- val dataForHashing = hashItem.getData() as? String ?: "Any data mother...s"
- val hashedData = when (card.curve) {
- EllipticCurve.Secp256k1 -> dataForHashing.calculateSha256()
- EllipticCurve.Ed25519 -> dataForHashing.calculateSha512()
- else -> return null
- }
- hashItem.setData(hashedData.toHexString())
- }
- return affectedItems.toList()
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/PersonalizationResources.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/PersonalizationResources.kt
deleted file mode 100644
index a45bc55ed4..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/PersonalizationResources.kt
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.tangem.tangemtest.ucase.resources.initializers
-
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest.ucase.resources.ResourceHolder
-import com.tangem.tangemtest.ucase.resources.Resources
-import com.tangem.tangemtest.ucase.variants.personalize.*
-import ru.dev.gbixahue.eu4d.lib.kotlin.common.TypedHolder
-
-/**
-[REDACTED_AUTHOR]
- */
-class PersonalizationResources() {
- fun init(holder: ResourceHolder) {
- initBlock(holder)
- initCardNumber(holder)
- initCommon(holder)
- initSigningMethod(holder)
- initSignHashExProp(holder)
- initDenomination(holder)
- initToken(holder)
- initProductMask(holder)
- initSettingsMask(holder)
- initSettingsMaskProtocolEnc(holder)
- initSettingsMaskNdef(holder)
- initPins(holder)
- }
-
- private fun initBlock(holder: TypedHolder) {
- holder.register(BlockId.CardNumber, Resources(R.string.pers_block_card_number, R.string.info_pers_block_card_number))
- holder.register(BlockId.Common, Resources(R.string.pers_block_common, R.string.info_pers_block_common))
- holder.register(BlockId.SigningMethod, Resources(R.string.pers_block_signing_method, R.string.info_pers_block_signing_method))
- holder.register(BlockId.SignHashExProp, Resources(R.string.pers_block_sign_hash_ex_prop, R.string.info_pers_block_sign_hash_ex_prop))
- holder.register(BlockId.Denomination, Resources(R.string.pers_block_denomination, R.string.info_pers_block_denomination))
- holder.register(BlockId.Token, Resources(R.string.pers_block_token, R.string.info_pers_block_token))
- holder.register(BlockId.ProdMask, Resources(R.string.pers_block_product_mask, R.string.info_pers_block_product_mask))
- holder.register(BlockId.SettingsMask, Resources(R.string.pers_block_settings_mask, R.string.info_pers_block_settings_mask))
- holder.register(BlockId.SettingsMaskProtocolEnc, Resources(R.string.pers_block_settings_mask_protocol_enc, R.string.info_pers_block_settings_mask_protocol_enc))
- holder.register(BlockId.SettingsMaskNdef, Resources(R.string.pers_block_settings_mask_ndef, R.string.info_pers_block_settings_mask_ndef))
- holder.register(BlockId.Pins, Resources(R.string.pers_block_pins, R.string.info_pers_block_pins))
- }
-
- private fun initCardNumber(holder: TypedHolder) {
- holder.register(CardNumber.Series, Resources(R.string.pers_item_series, R.string.info_pers_item_series))
- holder.register(CardNumber.Number, Resources(R.string.pers_item_number, R.string.info_pers_item_number))
- holder.register(CardNumber.BatchId, Resources(R.string.pers_item_batch_id, R.string.info_pers_item_batch_id))
- }
-
- private fun initCommon(holder: TypedHolder) {
- holder.register(Common.Curve, Resources(R.string.pers_item_curve, R.string.info_pers_item_curve))
- holder.register(Common.Blockchain, Resources(R.string.pers_item_blockchain, R.string.info_pers_item_blockchain))
- holder.register(Common.BlockchainCustom, Resources(R.string.pers_item_custom_blockchain, R.string.info_pers_item_custom_blockchain))
- holder.register(Common.MaxSignatures, Resources(R.string.pers_item_max_signatures, R.string.info_pers_item_max_signatures))
- holder.register(Common.CreateWallet, Resources(R.string.pers_item_create_wallet, R.string.info_pers_item_create_wallet))
- }
-
- private fun initSigningMethod(holder: TypedHolder) {
- holder.register(SigningMethod.SignTx, Resources(R.string.pers_item_sign_tx_hashes, R.string.info_pers_item_sign_tx_hashes))
- holder.register(SigningMethod.SignTxRaw, Resources(R.string.pers_item_sign_raw_tx, R.string.info_pers_item_sign_raw_tx))
- holder.register(SigningMethod.SignValidatedTx, Resources(R.string.pers_item_sign_validated_tx_hashes, R.string.info_pers_item_sign_validated_tx_hashes))
- holder.register(SigningMethod.SignValidatedTxRaw, Resources(R.string.pers_item_sign_validated_raw_tx, R.string.info_pers_item_sign_validated_raw_tx))
- holder.register(SigningMethod.SignValidatedTxIssuer, Resources(R.string.pers_item_sign_validated_tx_hashes_with_iss_data, R.string.info_pers_item_sign_validated_tx_hashes_with_iss_data))
- holder.register(SigningMethod.SignValidatedTxRawIssuer, Resources(R.string.pers_item_sign_validated_raw_tx_with_iss_data, R.string.info_pers_item_sign_validated_raw_tx_with_iss_data))
- holder.register(SigningMethod.SignExternal, Resources(R.string.pers_item_sign_hash_ex, R.string.info_pers_item_sign_hash_ex))
- }
-
- private fun initSignHashExProp(holder: TypedHolder) {
- holder.register(SignHashExProp.PinLessFloorLimit, Resources(R.string.pers_item_pin_less_floor_limit, R.string.info_pers_item_pin_less_floor_limit))
- holder.register(SignHashExProp.CryptoExKey, Resources(R.string.pers_item_cr_ex_key, R.string.info_pers_item_cr_ex_key))
- holder.register(SignHashExProp.RequireTerminalCertSig, Resources(R.string.pers_item_require_terminal_cert_sig, R.string.info_pers_item_require_terminal_cert_sig))
- holder.register(SignHashExProp.RequireTerminalTxSig, Resources(R.string.pers_item_require_terminal_tx_sig, R.string.info_pers_item_require_terminal_tx_sig))
- holder.register(SignHashExProp.CheckPin3, Resources(R.string.pers_item_check_pin3_on_card, R.string.info_pers_item_check_pin3_on_card))
- }
-
- private fun initDenomination(holder: TypedHolder) {
- holder.register(Denomination.WriteOnPersonalize, Resources(R.string.pers_item_write_on_personalize, R.string.info_pers_item_write_on_personalize))
- holder.register(Denomination.Denomination, Resources(R.string.pers_item_denomination, R.string.info_pers_item_denomination))
- }
-
- private fun initToken(holder: TypedHolder) {
- holder.register(Token.ItsToken, Resources(R.string.pers_item_its_token, R.string.info_pers_item_its_token))
- holder.register(Token.Symbol, Resources(R.string.pers_item_symbol, R.string.info_pers_item_symbol))
- holder.register(Token.ContractAddress, Resources(R.string.pers_item_contract_address, R.string.info_pers_item_contract_address))
- holder.register(Token.Decimal, Resources(R.string.pers_item_decimal, R.string.info_pers_item_decimal))
- }
-
- private fun initProductMask(holder: TypedHolder) {
- holder.register(ProductMask.Note, Resources(R.string.pers_item_note, R.string.info_pers_item_note))
- holder.register(ProductMask.Tag, Resources(R.string.pers_item_tag, R.string.info_pers_item_tag))
- holder.register(ProductMask.IdCard, Resources(R.string.pers_item_id_card, R.string.info_pers_item_id_card))
- holder.register(ProductMask.IdIssuerCard, Resources(R.string.pers_item_id_issuer_card, R.string.info_pers_item_id_issuer_card))
- }
-
- private fun initSettingsMask(holder: TypedHolder) {
- holder.register(SettingsMask.IsReusable, Resources(R.string.pers_item_is_reusable, R.string.info_pers_item_is_reusable))
- holder.register(SettingsMask.NeedActivation, Resources(R.string.pers_item_need_activation, R.string.info_pers_item_need_activation))
- holder.register(SettingsMask.ForbidPurge, Resources(R.string.pers_item_forbid_purge, R.string.info_pers_item_forbid_purge))
- holder.register(SettingsMask.AllowSelectBlockchain, Resources(R.string.pers_item_allow_select_blockchain, R.string.info_pers_item_allow_select_blockchain))
- holder.register(SettingsMask.UseBlock, Resources(R.string.pers_item_use_block, R.string.info_pers_item_use_block))
- holder.register(SettingsMask.OneApdu, Resources(R.string.pers_item_one_apdu_at_once, R.string.info_pers_item_one_apdu_at_once))
- holder.register(SettingsMask.UseCvc, Resources(R.string.pers_item_use_cvc, R.string.info_pers_item_use_cvc))
- holder.register(SettingsMask.AllowSwapPin, Resources(R.string.pers_item_allow_swap_pin, R.string.info_pers_item_allow_swap_pin))
- holder.register(SettingsMask.AllowSwapPin2, Resources(R.string.pers_item_allow_swap_pin2, R.string.info_pers_item_allow_swap_pin2))
- holder.register(SettingsMask.ForbidDefaultPin, Resources(R.string.pers_item_forbid_default_pin, R.string.info_pers_item_forbid_default_pin))
- holder.register(SettingsMask.SmartSecurityDelay, Resources(R.string.pers_item_smart_security_delay, R.string.info_pers_item_smart_security_delay))
- holder.register(SettingsMask.ProtectIssuerDataAgainstReplay, Resources(R.string.pers_item_protect_issuer_data_against_replay, R.string.info_pers_item_protect_issuer_data_against_replay))
- holder.register(SettingsMask.SkipSecurityDelayIfValidated, Resources(R.string.pers_item_skip_security_delay_if_validated, R.string.info_pers_item_skip_security_delay_if_validated))
- holder.register(SettingsMask.SkipPin2CvcIfValidated, Resources(R.string.pers_item_skip_pin2_and_cvc_if_validated, R.string.info_pers_item_skip_pin2_and_cvc_if_validated))
- holder.register(SettingsMask.SkipSecurityDelayOnLinkedTerminal, Resources(R.string.pers_item_skip_security_delay_on_linked_terminal, R.string.info_pers_item_skip_security_delay_on_linked_terminal))
- holder.register(SettingsMask.RestrictOverwriteExtraIssuerData, Resources(R.string.pers_item_restrict_overwrite_ex_issuer_data, R.string.info_pers_item_restrict_overwrite_ex_issuer_data))
- }
-
- private fun initSettingsMaskProtocolEnc(holder: TypedHolder) {
- holder.register(SettingsMaskProtocolEnc.AllowUnencrypted, Resources(R.string.pers_item_allow_unencrypted, R.string.info_pers_item_allow_unencrypted))
- holder.register(SettingsMaskProtocolEnc.AllowStaticEncryption, Resources(R.string.pers_item_allow_fast_encryption, R.string.info_pers_item_allow_fast_encryption))
- }
-
- private fun initSettingsMaskNdef(holder: TypedHolder) {
- holder.register(SettingsMaskNdef.UseNdef, Resources(R.string.pers_item_use_ndef, R.string.info_pers_item_use_ndef))
- holder.register(SettingsMaskNdef.DynamicNdef, Resources(R.string.pers_item_dynamic_ndef, R.string.info_pers_item_dynamic_ndef))
- holder.register(SettingsMaskNdef.DisablePrecomputedNdef, Resources(R.string.pers_item_disable_precomputed_ndef, R.string.info_pers_item_disable_precomputed_ndef))
- holder.register(SettingsMaskNdef.Aar, Resources(R.string.pers_item_aar, R.string.info_pers_item_aar))
- holder.register(SettingsMaskNdef.AarCustom, Resources(R.string.pers_item_custom_aar_package_name, R.string.info_pers_item_custom_aar_package_name))
- holder.register(SettingsMaskNdef.Uri, Resources(R.string.pers_item_uri, R.string.info_pers_item_uri))
- }
-
- private fun initPins(holder: TypedHolder) {
- holder.register(Pins.Pin, Resources(R.string.pers_item_pin, R.string.info_pers_item_pin))
- holder.register(Pins.Pin2, Resources(R.string.pers_item_pin2, R.string.info_pers_item_pin2))
- holder.register(Pins.Pin3, Resources(R.string.pers_item_pin3, R.string.info_pers_item_pin3))
- holder.register(Pins.Cvc, Resources(R.string.pers_item_cvc, R.string.info_pers_item_cvc))
- holder.register(Pins.PauseBeforePin2, Resources(R.string.pers_item_pause_before_pin2, R.string.info_pers_item_pause_before_pin2))
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/TlvResources.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/TlvResources.kt
deleted file mode 100644
index 4de4ab008f..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/TlvResources.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.tangem.tangemtest.ucase.resources.initializers
-
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest.ucase.resources.MainResourceHolder
-import com.tangem.tangemtest.ucase.resources.Resources
-import com.tangem.tangemtest.ucase.variants.TlvId
-
-/**
-[REDACTED_AUTHOR]
- */
-class TlvResources {
- fun init(holder: MainResourceHolder) {
- initScan(holder)
- }
-
- private fun initScan(holder: MainResourceHolder) {
- holder.register(TlvId.CardId, Resources(R.string.tlv_card_id, R.string.info_tlv_card_id))
- holder.register(TlvId.TransactionOutHash, Resources(R.string.tlv_transaction_out_hash, R.string.info_tlv_transaction_out_hash))
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/Ids.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/Ids.kt
deleted file mode 100644
index 13f4ddcf27..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/Ids.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.tangem.tangemtest.ucase.variants
-
-import com.tangem.tangemtest._arch.structure.Id
-
-/**
-[REDACTED_AUTHOR]
- */
-enum class TlvId : Id {
- CardId,
- TransactionOutHash,
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt
deleted file mode 100644
index 107ab9b3b3..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.depersonalize.ui
-
-import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager
-import com.tangem.tangemtest.ucase.domain.paramsManager.managers.DepersonalizeItemsManager
-import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment
-
-/**
-[REDACTED_AUTHOR]
- */
-class DepersonalizeActionFragment : BaseCardActionFragment() {
-
- override val itemsManager: ItemsManager by lazy { DepersonalizeItemsManager() }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/DefaultValues.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/DefaultValues.kt
deleted file mode 100644
index 2f406d98c3..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/DefaultValues.kt
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.personalize.converter
-
-import com.tangem.commands.EllipticCurve
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.abstraction.KeyValue
-import com.tangem.tangemtest.ucase.variants.personalize.*
-import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizationConfig
-import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder
-
-/**
-[REDACTED_AUTHOR]
- */
-class ConfigValuesHolder : BaseTypedHolder() {
-
- // All registered association values can't be objects
- fun init(default: PersonalizationConfig) {
- register(CardNumber.Series, Value(default.series))
- register(CardNumber.Number, Value(default.startNumber))
- register(CardNumber.BatchId, Value(default.batchId))
- register(Common.Curve, Value(default.curveID, Helper.listOfCurves()))
- register(Common.Blockchain, Value(default.blockchain, Helper.listOfBlockchain()))
- register(Common.BlockchainCustom, Value(default.blockchainCustom))
- register(Common.MaxSignatures, Value(default.MaxSignatures))
- register(Common.CreateWallet, Value(default.createWallet))
- register(SigningMethod.SignTx, Value(default.SigningMethod0))
- register(SigningMethod.SignTxRaw, Value(default.SigningMethod1))
- register(SigningMethod.SignValidatedTx, Value(default.SigningMethod2))
- register(SigningMethod.SignValidatedTxRaw, Value(default.SigningMethod3))
- register(SigningMethod.SignValidatedTxIssuer, Value(default.SigningMethod4))
- register(SigningMethod.SignValidatedTxRawIssuer, Value(default.SigningMethod5))
- register(SigningMethod.SignExternal, Value(default.SigningMethod6))
- register(SignHashExProp.PinLessFloorLimit, Value(default.pinLessFloorLimit))
- register(SignHashExProp.CryptoExKey, Value(default.hexCrExKey))
- register(SignHashExProp.RequireTerminalCertSig, Value(default.requireTerminalCertSignature))
- register(SignHashExProp.RequireTerminalTxSig, Value(default.requireTerminalTxSignature))
- register(SignHashExProp.CheckPin3, Value(default.checkPIN3onCard))
- register(Denomination.WriteOnPersonalize, Value(default.writeOnPersonalization))
- register(Denomination.Denomination, Value(default.denomination))
- register(Token.ItsToken, Value(default.itsToken))
- register(Token.Symbol, Value(default.symbol))
- register(Token.ContractAddress, Value(default.contractAddress))
- register(Token.Decimal, Value(default.decimal))
- register(ProductMask.Note, Value(default.cardData.product_note))
- register(ProductMask.Tag, Value(default.cardData.product_tag))
- register(ProductMask.IdCard, Value(default.cardData.product_id_card))
- register(ProductMask.IdIssuerCard, Value(default.cardData.product_id_issuer))
- register(SettingsMask.IsReusable, Value(default.isReusable))
- register(SettingsMask.NeedActivation, Value(default.useActivation))
- register(SettingsMask.ForbidPurge, Value(default.forbidPurgeWallet))
- register(SettingsMask.AllowSelectBlockchain, Value(default.allowSelectBlockchain))
- register(SettingsMask.UseBlock, Value(default.useBlock))
- register(SettingsMask.OneApdu, Value(default.oneApdu))
- register(SettingsMask.UseCvc, Value(default.useCVC))
- register(SettingsMask.AllowSwapPin, Value(default.allowSwapPIN))
- register(SettingsMask.AllowSwapPin2, Value(default.allowSwapPIN2))
- register(SettingsMask.ForbidDefaultPin, Value(default.forbidDefaultPIN))
- register(SettingsMask.SmartSecurityDelay, Value(default.smartSecurityDelay))
- register(SettingsMask.ProtectIssuerDataAgainstReplay, Value(default.protectIssuerDataAgainstReplay))
- register(SettingsMask.SkipSecurityDelayIfValidated, Value(default.skipSecurityDelayIfValidatedByIssuer))
- register(SettingsMask.SkipPin2CvcIfValidated, Value(default.skipCheckPIN2andCVCIfValidatedByIssuer))
- register(SettingsMask.SkipSecurityDelayOnLinkedTerminal, Value(default.skipSecurityDelayIfValidatedByLinkedTerminal))
- register(SettingsMask.RestrictOverwriteExtraIssuerData, Value(default.restrictOverwriteIssuerDataEx))
- register(SettingsMaskProtocolEnc.AllowUnencrypted, Value(default.protocolAllowUnencrypted))
- register(SettingsMaskProtocolEnc.AllowStaticEncryption, Value(default.protocolAllowStaticEncryption))
- register(SettingsMaskNdef.UseNdef, Value(default.useNDEF))
- register(SettingsMaskNdef.DynamicNdef, Value(default.useDynamicNDEF))
- register(SettingsMaskNdef.DisablePrecomputedNdef, Value(default.disablePrecomputedNDEF))
- register(SettingsMaskNdef.Aar, Value(default.aar, Helper.aarList()))
- register(SettingsMaskNdef.AarCustom, Value(default.aarCustom))
- register(SettingsMaskNdef.Uri, Value(default.uri))
- register(Pins.Pin, Value(default.PIN))
- register(Pins.Pin2, Value(default.PIN2))
- register(Pins.Pin3, Value(default.PIN3))
- register(Pins.Cvc, Value(default.CVC))
- register(Pins.PauseBeforePin2, Value(default.pauseBeforePIN2, Helper.pauseBeforePin()))
- }
-}
-
-class Value(
- private var value: Any? = null,
- val list: List? = mutableListOf()
-) {
- fun get(): Any? = value
- fun set(newValue: Any?) {
- value = newValue
- }
-}
-
-internal class Helper {
- companion object {
- fun listOfCurves(): List {
- return EllipticCurve.values().map { KeyValue(it.name, it.curve) }
- }
-
- fun listOfBlockchain(): List {
- return mutableListOf(
- KeyValue("--- CUSTOM ---", ""),
- KeyValue("BTC", "BTC"),
- KeyValue("BTC/test", "BTC/test"),
- KeyValue("ETH", "ETH"),
- KeyValue("ETH/test", "ETH/test"),
- KeyValue("BCH", "BCH"),
- KeyValue("BCH/test", "BCH/test"),
- KeyValue("LTC", "LTC"),
- KeyValue("XLM", "XLM"),
- KeyValue("XLM/test", "XLM/test"),
- KeyValue("RSK", "RSK"),
- KeyValue("XPR", "XPR"),
- KeyValue("CARDANO", "CARDANO"),
- KeyValue("BNB", "BNB"),
- KeyValue("XTZ", "XTZ"),
- KeyValue("DUC", "DUC")
- )
- }
-
- fun aarList(): List {
- return mutableListOf(
- KeyValue("--- CUSTOM ---", ""),
- KeyValue("Release APP", "com.tangem.wallet"),
- KeyValue("Debug APP", "com.tangem.wallet.debug"),
- KeyValue("None", "")
- )
- }
-
- fun pauseBeforePin(): List {
- return mutableListOf(
- KeyValue("immediately", 0L),
- KeyValue("2 seconds", 2000L),
- KeyValue("5 seconds", 5000L),
- KeyValue("15 seconds", 15000L),
- KeyValue("30 seconds", 30000L),
- KeyValue("1 minute", 60000L),
- KeyValue("2 minute", 120000L)
- )
- }
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/PersonalizationConfigToCardConfig.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/PersonalizationConfigToCardConfig.kt
deleted file mode 100644
index a1c710527b..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/PersonalizationConfigToCardConfig.kt
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.personalize.converter
-
-import com.tangem.commands.*
-import com.tangem.commands.personalization.entities.CardConfig
-import com.tangem.commands.personalization.entities.NdefRecord
-import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizationConfig
-import ru.dev.gbixahue.eu4d.lib.kotlin.common.Converter
-import java.util.*
-
-class PersonalizationConfigToCardConfig : Converter {
-
- override fun convert(from: PersonalizationConfig): CardConfig {
- val signingMethodMaskBuilder = SigningMethodMaskBuilder()
- if (from.SigningMethod0) {
- signingMethodMaskBuilder.add(SigningMethod.SignHash)
- }
- if (from.SigningMethod1) {
- signingMethodMaskBuilder.add(SigningMethod.SignRaw)
- }
- if (from.SigningMethod2) {
- signingMethodMaskBuilder.add(SigningMethod.SignHashValidateByIssuer)
- }
- if (from.SigningMethod3) {
- signingMethodMaskBuilder.add(SigningMethod.SignRawValidateByIssuer)
- }
- if (from.SigningMethod4) {
- signingMethodMaskBuilder.add(SigningMethod.SignHashValidateByIssuerWriteIssuerData)
- }
- if (from.SigningMethod5) {
- signingMethodMaskBuilder.add(SigningMethod.SignRawValidateByIssuerWriteIssuerData)
- }
- if (from.SigningMethod6) {
- signingMethodMaskBuilder.add(SigningMethod.SignHash)
- }
- val signingMethod = signingMethodMaskBuilder.build()
-
- val isNote = from.cardData.product_note
- val isTag = from.cardData.product_tag
- val isIdCard = from.cardData.product_id_card
- val isIdIssuer = from.cardData.product_id_issuer
-
- val productMaskBuilder = ProductMaskBuilder()
- if (isNote) productMaskBuilder.add(com.tangem.commands.Product.Note)
- if (isTag) productMaskBuilder.add(com.tangem.commands.Product.Tag)
- if (isIdCard) productMaskBuilder.add(com.tangem.commands.Product.IdCard)
- if (isIdIssuer) productMaskBuilder.add(com.tangem.commands.Product.IdIssuer)
- val productMask = productMaskBuilder.build()
-
- var tokenSymbol: String? = null
- var tokenContractAddress: String? = null
- var tokenDecimal: Int? = null
- if (from.itsToken) {
- tokenSymbol = from.symbol
- tokenContractAddress = from.contractAddress
- tokenDecimal = from.decimal.toInt()
- }
-
- val blockchain = if (from.blockchain.isNotEmpty()) from.blockchain else from.blockchainCustom
- val cardData = CardData(
- blockchainName = blockchain,
- batchId = from.batchId,
- productMask = productMask,
- tokenSymbol = tokenSymbol,
- tokenContractAddress = tokenContractAddress,
- tokenDecimal = tokenDecimal,
- issuerName = null,
- manufactureDateTime = Calendar.getInstance().time,
- manufacturerSignature = null)
-
-
- val ndefs = mutableListOf()
- if (from.uri.isNotEmpty()) {
- ndefs.add(NdefRecord(NdefRecord.Type.URI, from.uri))
- }
- when (from.aar) {
- "None" -> null
- "--- CUSTOM ---" -> NdefRecord(NdefRecord.Type.AAR, from.aarCustom)
- else -> NdefRecord(NdefRecord.Type.AAR, from.aar)
- }?.let { ndefs.add(it) }
-
- return CardConfig(
- "Tangem",
- "Tangem Test",
- from.series,
- from.startNumber,
- 1000,
- from.PIN,
- from.PIN2,
- from.PIN3,
- from.hexCrExKey,
- from.CVC,
- from.pauseBeforePIN2.toInt(),
- from.smartSecurityDelay,
- EllipticCurve.byName(from.curveID) ?: EllipticCurve.Secp256k1,
- signingMethod,
- from.MaxSignatures.toInt(),
- from.isReusable,
- from.allowSwapPIN,
- from.allowSwapPIN2,
- from.useActivation,
- from.useCVC,
- from.useNDEF,
- from.useDynamicNDEF,
- from.oneApdu,
- from.useBlock,
- from.allowSelectBlockchain,
- from.forbidPurgeWallet,
- from.protocolAllowUnencrypted,
- from.protocolAllowStaticEncryption,
- from.protectIssuerDataAgainstReplay,
- from.forbidDefaultPIN,
- from.disablePrecomputedNDEF,
- from.skipSecurityDelayIfValidatedByIssuer,
- from.skipCheckPIN2andCVCIfValidatedByIssuer,
- from.skipSecurityDelayIfValidatedByLinkedTerminal,
- from.restrictOverwriteIssuerDataEx,
- from.requireTerminalTxSignature,
- from.requireTerminalCertSignature,
- from.checkPIN3onCard,
- from.createWallet,
- cardData,
- ndefs
- )
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt
deleted file mode 100644
index 067d47027c..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.responses.converter
-
-import com.tangem.commands.Card
-import com.tangem.commands.SignResponse
-import com.tangem.commands.personalization.DepersonalizeResponse
-import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder
-import java.lang.reflect.Type
-
-class ConvertersStore : BaseTypedHolder() {
- init {
-// register(CompletionResult.Success::class.java, ReadEventConverter())
- register(SignResponse::class.java, SignResponseConverter())
- register(Card::class.java, CardConverter())
- register(DepersonalizeResponse::class.java, DepersonalizeResponseConverter())
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt
deleted file mode 100644
index 64b8edbec5..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.responses.converter
-
-import com.tangem.commands.SignResponse
-import com.tangem.commands.personalization.DepersonalizeResponse
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.impl.TextItem
-import com.tangem.tangemtest.ucase.variants.responses.DepersonalizeId
-import com.tangem.tangemtest.ucase.variants.responses.SignId
-import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
-
-/**
-[REDACTED_AUTHOR]
- */
-class SignResponseConverter : BaseResponseConverter() {
-
- override fun convert(from: SignResponse): List
- {
- return listOf(
- TextItem(SignId.cid, from.cardId),
- TextItem(SignId.walletSignedHashes, valueToString(from.walletSignedHashes)),
- TextItem(SignId.walletRemainingSignatures, valueToString(from.walletRemainingSignatures)),
- TextItem(SignId.signature, fieldConverter.byteArray(from.signature))
- )
- }
-}
-
-class DepersonalizeResponseConverter : BaseResponseConverter() {
- override fun convert(from: DepersonalizeResponse): List
- {
- return listOf(TextItem(DepersonalizeId.isSuccess, stringOf(from.success)))
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/item/TextItem.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/item/TextItem.kt
deleted file mode 100644
index 452b1e47bc..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/item/TextItem.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.responses.item
-
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.abstraction.BaseItemViewModel
-import com.tangem.tangemtest._arch.structure.abstraction.ItemViewModel
-import com.tangem.tangemtest._arch.structure.abstraction.ViewState
-import com.tangem.tangemtest._arch.structure.impl.TypedItem
-
-open class TextHeaderItem(id: Id, viewModel: ItemViewModel) : TypedItem(id, viewModel) {
- constructor(id: Id, value: String? = null, viewState: ViewState = ViewState())
- : this(id, BaseItemViewModel(value, viewState))
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseItemBuilder.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseItemBuilder.kt
deleted file mode 100644
index ec39879032..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseItemBuilder.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.responses.ui.widget
-
-import android.view.ViewGroup
-import com.tangem.tangemtest._arch.structure.abstraction.BaseItem
-import com.tangem.tangemtest._arch.structure.impl.BoolItem
-import com.tangem.tangemtest._arch.structure.impl.TextItem
-import com.tangem.tangemtest._arch.widget.ItemWidgetBuilder
-import com.tangem.tangemtest._arch.widget.abstraction.ViewWidget
-import com.tangem.tangemtest.ucase.variants.responses.item.TextHeaderItem
-
-/**
-[REDACTED_AUTHOR]
- */
-class ResponseItemBuilder : ItemWidgetBuilder {
- override fun build(item: BaseItem, parent: ViewGroup): ViewWidget? {
- return when (item) {
- is TextHeaderItem -> ResponseHeaderWidget(parent, item)
- is TextItem -> ResponseTextWidget(parent, item)
- is BoolItem -> CheckBoxWidget(parent, item)
- else -> null
- }
- }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt
deleted file mode 100644
index 4453eec6e1..0000000000
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.tangem.tangemtest.ucase.variants.sign.ui
-
-import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager
-import com.tangem.tangemtest.ucase.domain.paramsManager.managers.SignItemsManager
-import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment
-
-/**
-[REDACTED_AUTHOR]
- */
-class SignActionFragment : BaseCardActionFragment() {
-
- override val itemsManager: ItemsManager by lazy { SignItemsManager() }
-}
\ No newline at end of file
diff --git a/tangem-demo/src/main/res/drawable/ic_launcher_background.xml b/tangem-demo/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 0d025f9bf6..0000000000
--- a/tangem-demo/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tangem-demo/src/main/res/layout/view_simple_button.xml b/tangem-demo/src/main/res/layout/view_simple_button.xml
deleted file mode 100644
index c756fbb150..0000000000
--- a/tangem-demo/src/main/res/layout/view_simple_button.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tangem-demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/tangem-demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index eca70cfe52..0000000000
--- a/tangem-demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/tangem-demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/tangem-demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index eca70cfe52..0000000000
--- a/tangem-demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/tangem-demo/src/main/res/mipmap-hdpi/ic_launcher.png b/tangem-demo/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 898f3ed59a..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-hdpi/ic_launcher_round.png b/tangem-demo/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index dffca3601e..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-mdpi/ic_launcher.png b/tangem-demo/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 64ba76f75e..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-mdpi/ic_launcher_round.png b/tangem-demo/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index dae5e08234..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-xhdpi/ic_launcher.png b/tangem-demo/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index e5ed46597e..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/tangem-demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 14ed0af350..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-xxhdpi/ic_launcher.png b/tangem-demo/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index b0907cac3b..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/tangem-demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index d8ae031549..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/tangem-demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 2c18de9e66..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/tangem-demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index beed3cdd2c..0000000000
Binary files a/tangem-demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/tangem-demo/src/main/res/values/strings_action.xml b/tangem-demo/src/main/res/values/strings_action.xml
deleted file mode 100644
index ed962e51fb..0000000000
--- a/tangem-demo/src/main/res/values/strings_action.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- Read Card
- Sign
- Personalize
- Depersonalize
- Create wallet
- Purge wallet
- Read issuer data
- Write issuer data
- Read issuer extra data
- Write issuer extra data
- Read user data
- Write user data
-
- This command returns all data about the card and the wallet, including unique card number (CID) that has to be submitted while calling all other commands
- Depending on Signing_Method parameter defined during personalization, this command signs data using Wallet_PrivateKey
- Personalization is an initialization procedure, required before start using a card. During this procedure all card setting are performed. During this procedure all data exchange are encrypted because it\'s usually done at the third-party factory.
- This command reset card to initial state - erase all data, writed during previous personalization and previous usage.
- \nCommand available on SDK cards only
- SomeDescription
- SomeDescription
- SomeDescription
- SomeDescription
- SomeDescription
- SomeDescription
- SomeDescription
- SomeDescription
-
-
\ No newline at end of file
diff --git a/tangem-demo/src/main/res/values/strings_tlv.xml b/tangem-demo/src/main/res/values/strings_tlv.xml
deleted file mode 100644
index fe18360367..0000000000
--- a/tangem-demo/src/main/res/values/strings_tlv.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- Card Id (CID)
- Hash to sign
-
- Unique Tangem card ID number
- Hashed transaction you want to be signed
-
-
\ No newline at end of file
diff --git a/tangem-demo/.gitignore b/tangem-devkit/.gitignore
similarity index 100%
rename from tangem-demo/.gitignore
rename to tangem-devkit/.gitignore
diff --git a/tangem-demo/build.gradle b/tangem-devkit/build.gradle
similarity index 97%
rename from tangem-demo/build.gradle
rename to tangem-devkit/build.gradle
index fd56546bed..e692140432 100644
--- a/tangem-demo/build.gradle
+++ b/tangem-devkit/build.gradle
@@ -6,7 +6,7 @@ android {
buildToolsVersion "29.0.3"
defaultConfig {
- applicationId "com.tangem.tangemtest"
+ applicationId "com.tangem.devkit"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
diff --git a/tangem-demo/proguard-rules.pro b/tangem-devkit/proguard-rules.pro
similarity index 100%
rename from tangem-demo/proguard-rules.pro
rename to tangem-devkit/proguard-rules.pro
diff --git a/tangem-demo/src/main/AndroidManifest.xml b/tangem-devkit/src/main/AndroidManifest.xml
similarity index 91%
rename from tangem-demo/src/main/AndroidManifest.xml
rename to tangem-devkit/src/main/AndroidManifest.xml
index cf184dcfe2..e0749468f0 100644
--- a/tangem-demo/src/main/AndroidManifest.xml
+++ b/tangem-devkit/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.tangem.devkit">
-
+
@@ -48,7 +48,7 @@
android:resource="@xml/nfc_tech_filter" />
-
+
diff --git a/tangem-devkit/src/main/ic_launcher-playstore.png b/tangem-devkit/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000000..6e5af9f8f6
Binary files /dev/null and b/tangem-devkit/src/main/ic_launcher-playstore.png differ
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt b/tangem-devkit/src/main/java/com/tangem/devkit/AppTangemDemo.kt
similarity index 79%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/AppTangemDemo.kt
index ab604ee506..60ee3d4564 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/AppTangemDemo.kt
@@ -1,11 +1,11 @@
-package com.tangem.tangemtest
+package com.tangem.devkit
import android.app.Application
import android.content.Context
import android.content.SharedPreferences
-import com.tangem.tangemtest._arch.structure.ILog
-import com.tangem.tangemtest._arch.structure.ItemLogger
-import com.tangem.tangemtest.commons.TangemLogger
+import com.tangem.devkit._arch.structure.ILog
+import com.tangem.devkit._arch.structure.ItemLogger
+import com.tangem.devkit.commons.TangemLogger
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
/**
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/Old_MainActivity.kt b/tangem-devkit/src/main/java/com/tangem/devkit/Old_MainActivity.kt
similarity index 99%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/Old_MainActivity.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/Old_MainActivity.kt
index 40998ca19b..ffccc70603 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/Old_MainActivity.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/Old_MainActivity.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest
+package com.tangem.devkit
import android.content.Intent
import android.os.Bundle
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/TestUserDataActivity.kt b/tangem-devkit/src/main/java/com/tangem/devkit/TestUserDataActivity.kt
similarity index 99%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/TestUserDataActivity.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/TestUserDataActivity.kt
index 7f3ba0639d..c6124d542f 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/TestUserDataActivity.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/TestUserDataActivity.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest
+package com.tangem.devkit
import android.os.Bundle
import android.view.View
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/SingleLiveEvent.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/SingleLiveEvent.kt
similarity index 96%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/SingleLiveEvent.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/SingleLiveEvent.kt
index 943023a1c1..1e6ed8667e 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/SingleLiveEvent.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/SingleLiveEvent.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._arch
+package com.tangem.devkit._arch
import android.util.Log
import androidx.annotation.MainThread
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/HelpAbstracts.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/HelpAbstracts.kt
similarity index 86%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/HelpAbstracts.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/HelpAbstracts.kt
index 309309c947..018e074061 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/HelpAbstracts.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/HelpAbstracts.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._arch.structure
+package com.tangem.devkit._arch.structure
/**
[REDACTED_AUTHOR]
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/Ids.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/Ids.kt
new file mode 100644
index 0000000000..bc05f80fca
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/Ids.kt
@@ -0,0 +1,25 @@
+package com.tangem.devkit._arch.structure
+
+/**
+[REDACTED_AUTHOR]
+ */
+interface Id {
+
+ companion object {
+ fun getTag(id: Id): String {
+ val className = id.javaClass.simpleName
+ return if (id is Enum<*>) "$className.${id.name}" else className
+ }
+ }
+}
+
+class StringId(val value: String) : Id
+
+class StringResId(val value: Int) : Id
+
+enum class Additional : Id {
+ UNDEFINED,
+ JSON_INCOMING,
+ JSON_OUTGOING,
+ JSON_TAILS,
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/Logger.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/Logger.kt
similarity index 94%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/Logger.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/Logger.kt
index e71fc33cb6..5ba36bbbaa 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/Logger.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/Logger.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._arch.structure
+package com.tangem.devkit._arch.structure
import ru.dev.gbixahue.eu4d.lib.android.global.log.Logger
import ru.dev.gbixahue.eu4d.lib.android.global.log.TagLogger
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Extension.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Extension.kt
similarity index 81%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Extension.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Extension.kt
index 2aa3fb6af5..41a4aab5ae 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Extension.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Extension.kt
@@ -1,6 +1,6 @@
-package com.tangem.tangemtest._arch.structure.abstraction
+package com.tangem.devkit._arch.structure.abstraction
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.Id
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Item.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Item.kt
similarity index 87%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Item.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Item.kt
index 7800192199..d1fae9c535 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Item.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Item.kt
@@ -1,6 +1,6 @@
-package com.tangem.tangemtest._arch.structure.abstraction
+package com.tangem.devkit._arch.structure.abstraction
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.Id
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ItemGroup.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ItemGroup.kt
similarity index 89%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ItemGroup.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ItemGroup.kt
index 20a8def0e6..1d38ba6f6d 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ItemGroup.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ItemGroup.kt
@@ -1,7 +1,7 @@
-package com.tangem.tangemtest._arch.structure.abstraction
+package com.tangem.devkit._arch.structure.abstraction
-import com.tangem.tangemtest._arch.structure.ILog
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.ILog
+import com.tangem.devkit._arch.structure.Id
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ItemViewModel.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ItemViewModel.kt
similarity index 93%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ItemViewModel.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ItemViewModel.kt
index fc106588e6..eead6c8e3d 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ItemViewModel.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ItemViewModel.kt
@@ -1,8 +1,8 @@
-package com.tangem.tangemtest._arch.structure.abstraction
+package com.tangem.devkit._arch.structure.abstraction
-import com.tangem.tangemtest._arch.structure.ILog
-import com.tangem.tangemtest._arch.structure.Payload
-import com.tangem.tangemtest._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.ILog
+import com.tangem.devkit._arch.structure.Payload
+import com.tangem.devkit._arch.structure.PayloadHolder
/**
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ModelConverter.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ModelConverter.kt
similarity index 72%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ModelConverter.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ModelConverter.kt
index 09823a8495..30c69cd6b2 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/ModelConverter.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/ModelConverter.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._arch.structure.abstraction
+package com.tangem.devkit._arch.structure.abstraction
import ru.dev.gbixahue.eu4d.lib.kotlin.common.Converter
@@ -9,6 +9,11 @@ interface DefaultConverter {
fun convert(from: A, default: B): B
}
+interface TwoWayConverter {
+ fun aToB(from: A): B
+ fun bToA(from: B): A
+}
+
interface ItemsToModel : DefaultConverter
, M>
interface ModelToItems : Converter>
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Plugin.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Plugin.kt
similarity index 75%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Plugin.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Plugin.kt
index 71bdc779c7..aaa6254d7c 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/abstraction/Plugin.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/abstraction/Plugin.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._arch.structure.abstraction
+package com.tangem.devkit._arch.structure.abstraction
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/impl/Items.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/impl/Items.kt
similarity index 89%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/impl/Items.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/impl/Items.kt
index d4e4dde775..80145d31e4 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/structure/impl/Items.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/structure/impl/Items.kt
@@ -1,7 +1,7 @@
-package com.tangem.tangemtest._arch.structure.impl
+package com.tangem.devkit._arch.structure.impl
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.abstraction.*
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.abstraction.*
/**
[REDACTED_AUTHOR]
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/ItemWidgetBuilder.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/ItemWidgetBuilder.kt
new file mode 100644
index 0000000000..4659c0ac49
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/ItemWidgetBuilder.kt
@@ -0,0 +1,12 @@
+package com.tangem.devkit._arch.widget
+
+import android.view.ViewGroup
+import com.tangem.devkit._arch.structure.abstraction.BaseItem
+import com.tangem.devkit._arch.widget.abstraction.ViewWidget
+
+/**
+[REDACTED_AUTHOR]
+ */
+interface ItemWidgetBuilder {
+ fun build(item: BaseItem, parent: ViewGroup): ViewWidget?
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/WidgetBuilder.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/WidgetBuilder.kt
similarity index 65%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/WidgetBuilder.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/WidgetBuilder.kt
index 3d9a3493a5..cb39aa9072 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/WidgetBuilder.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/WidgetBuilder.kt
@@ -1,12 +1,12 @@
-package com.tangem.tangemtest._arch.widget
+package com.tangem.devkit._arch.widget
import android.view.ViewGroup
-import com.tangem.tangemtest._arch.structure.abstraction.BaseItem
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.ItemGroup
-import com.tangem.tangemtest._arch.widget.abstraction.ViewWidget
-import com.tangem.tangemtest._arch.widget.impl.LinearGroupWidget
-import com.tangem.tangemtest._arch.widget.impl.StubWidget
+import com.tangem.devkit._arch.structure.abstraction.BaseItem
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.abstraction.ItemGroup
+import com.tangem.devkit._arch.widget.abstraction.ViewWidget
+import com.tangem.devkit._arch.widget.impl.LinearGroupWidget
+import com.tangem.devkit._arch.widget.impl.StubWidget
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/abstraction/ViewWidget.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/abstraction/ViewWidget.kt
similarity index 85%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/abstraction/ViewWidget.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/abstraction/ViewWidget.kt
index 9b6c5f9d2c..e414e89cf7 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/abstraction/ViewWidget.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/abstraction/ViewWidget.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._arch.widget.abstraction
+package com.tangem.devkit._arch.widget.abstraction
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
@@ -6,11 +6,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.ColorRes
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.StringId
-import com.tangem.tangemtest._arch.structure.StringResId
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.ViewState
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.StringId
+import com.tangem.devkit._arch.structure.StringResId
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.abstraction.ViewState
import ru.dev.gbixahue.eu4d.lib.android._android.views.colorFrom
import ru.dev.gbixahue.eu4d.lib.kotlin.common.LayoutHolder
@@ -37,6 +38,7 @@ abstract class BaseViewWidget(
init {
subscribeToViewStateChanges(item.viewModel.viewState)
initViewState(item.viewModel.viewState)
+ view.tag = Id.getTag(item.id)
}
protected open fun subscribeToViewStateChanges(viewState: ViewState) {
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/impl/LinearGroupWidget.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/impl/LinearGroupWidget.kt
similarity index 53%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/impl/LinearGroupWidget.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/impl/LinearGroupWidget.kt
index 97c8d36a35..54948387de 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_arch/widget/impl/LinearGroupWidget.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/impl/LinearGroupWidget.kt
@@ -1,9 +1,9 @@
-package com.tangem.tangemtest._arch.widget.impl
+package com.tangem.devkit._arch.widget.impl
import android.view.ViewGroup
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.abstraction.ItemGroup
-import com.tangem.tangemtest._arch.widget.abstraction.BaseViewWidget
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.abstraction.ItemGroup
+import com.tangem.devkit._arch.widget.abstraction.BaseViewWidget
/**
[REDACTED_AUTHOR]
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/impl/StubWidget.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/impl/StubWidget.kt
new file mode 100644
index 0000000000..0edc41b3be
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_arch/widget/impl/StubWidget.kt
@@ -0,0 +1,15 @@
+package com.tangem.devkit._arch.widget.impl
+
+import android.view.ViewGroup
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.abstraction.BaseItem
+import com.tangem.devkit._arch.structure.abstraction.BaseItemViewModel
+import com.tangem.devkit._arch.widget.abstraction.BaseViewWidget
+
+/**
+[REDACTED_AUTHOR]
+ */
+class StubWidget(id: Id, parent: ViewGroup) : BaseViewWidget(parent, BaseItem(id, BaseItemViewModel())) {
+ override fun getLayoutId(): Int = R.layout.w_empty
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainActivity.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_main/MainActivity.kt
similarity index 97%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainActivity.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_main/MainActivity.kt
index c47ac39601..dbfd82105f 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainActivity.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_main/MainActivity.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._main
+package com.tangem.devkit._main
import android.content.res.Resources
import android.os.Bundle
@@ -12,7 +12,7 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupWithNavController
-import com.tangem.tangemtest.R
+import com.tangem.devkit.R
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
/**
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_main/MainViewModel.kt
similarity index 95%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_main/MainViewModel.kt
index 3900d86530..6766c6d77f 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_main/MainViewModel.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._main
+package com.tangem.devkit._main
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/ActionListFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_main/entryPoint/ActionListFragment.kt
similarity index 70%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/ActionListFragment.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_main/entryPoint/ActionListFragment.kt
index 4e10211223..5a1008d717 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/ActionListFragment.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_main/entryPoint/ActionListFragment.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest._main.entryPoint
+package com.tangem.devkit._main.entryPoint
import android.os.Bundle
import android.view.View
@@ -7,13 +7,13 @@ import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._main.MainViewModel
-import com.tangem.tangemtest.extensions.view.beginDelayedTransition
-import com.tangem.tangemtest.ucase.getDefaultNavigationOptions
-import com.tangem.tangemtest.ucase.resources.ActionType
-import com.tangem.tangemtest.ucase.resources.MainResourceHolder
-import com.tangem.tangemtest.ucase.ui.BaseFragment
+import com.tangem.devkit.R
+import com.tangem.devkit._main.MainViewModel
+import com.tangem.devkit.extensions.view.beginDelayedTransition
+import com.tangem.devkit.ucase.getDefaultNavigationOptions
+import com.tangem.devkit.ucase.resources.ActionType
+import com.tangem.devkit.ucase.resources.MainResourceHolder
+import com.tangem.devkit.ucase.ui.BaseFragment
import kotlinx.android.synthetic.main.fg_entry_point.*
/**
@@ -63,15 +63,15 @@ class ActionListFragment : BaseFragment() {
ActionType.Scan,
ActionType.Sign,
ActionType.Personalize,
- ActionType.Depersonalize
-// ActionType.CreateWallet,
-// ActionType.PurgeWallet,
-// ActionType.ReadIssuerData,
-// ActionType.WriteIssuerData,
-// ActionType.ReadIssuerExData,
-// ActionType.WriteIssuerExData,
-// ActionType.ReadUserData,
-// ActionType.WriteUserData
+ ActionType.Depersonalize,
+ ActionType.CreateWallet,
+ ActionType.PurgeWallet,
+ ActionType.ReadIssuerData,
+ ActionType.WriteIssuerData,
+ ActionType.ReadIssuerExData,
+ ActionType.WriteIssuerExData,
+ ActionType.ReadUserData,
+ ActionType.WriteUserData
)
}
}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt b/tangem-devkit/src/main/java/com/tangem/devkit/_main/entryPoint/RvActions.kt
similarity index 89%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/_main/entryPoint/RvActions.kt
index 5433027e92..01162d2eee 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/_main/entryPoint/RvActions.kt
@@ -1,14 +1,14 @@
-package com.tangem.tangemtest._main.entryPoint
+package com.tangem.devkit._main.entryPoint
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.annotation.StringRes
import androidx.recyclerview.widget.RecyclerView
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest.ucase.resources.ActionRes
-import com.tangem.tangemtest.ucase.resources.ActionType
-import com.tangem.tangemtest.ucase.resources.MainResourceHolder
+import com.tangem.devkit.R
+import com.tangem.devkit.ucase.resources.ActionRes
+import com.tangem.devkit.ucase.resources.ActionType
+import com.tangem.devkit.ucase.resources.MainResourceHolder
import ru.dev.gbixahue.eu4d.lib.android._android.views.inflate
import ru.dev.gbixahue.eu4d.lib.android._android.views.recycler_view.RvBaseAdapter
import ru.dev.gbixahue.eu4d.lib.android._android.views.recycler_view.RvBaseVH
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Abstractions.kt b/tangem-devkit/src/main/java/com/tangem/devkit/commons/Abstractions.kt
similarity index 87%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/commons/Abstractions.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/commons/Abstractions.kt
index 6c3b1abc26..3a1776e7c6 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Abstractions.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/commons/Abstractions.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.commons
+package com.tangem.devkit.commons
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/DialogController.kt b/tangem-devkit/src/main/java/com/tangem/devkit/commons/DialogController.kt
similarity index 98%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/commons/DialogController.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/commons/DialogController.kt
index de7db7ae3e..5d4c924409 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/DialogController.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/commons/DialogController.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.commons
+package com.tangem.devkit.commons
import android.app.Activity
import android.app.Dialog
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/GlobalFunctions.kt b/tangem-devkit/src/main/java/com/tangem/devkit/commons/GlobalFunctions.kt
similarity index 83%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/commons/GlobalFunctions.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/commons/GlobalFunctions.kt
index 59ae0da2b9..0f80ba2e83 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/GlobalFunctions.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/commons/GlobalFunctions.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.commons
+package com.tangem.devkit.commons
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Logger.kt b/tangem-devkit/src/main/java/com/tangem/devkit/commons/Logger.kt
similarity index 77%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/commons/Logger.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/commons/Logger.kt
index 795c23c726..94e709455a 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Logger.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/commons/Logger.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.commons
+package com.tangem.devkit.commons
import ru.dev.gbixahue.eu4d.lib.android.global.log.TagLogger
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/view/MultiActionView.kt b/tangem-devkit/src/main/java/com/tangem/devkit/commons/view/MultiActionView.kt
similarity index 90%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/commons/view/MultiActionView.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/commons/view/MultiActionView.kt
index ce21b9fae6..4e134e0336 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/view/MultiActionView.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/commons/view/MultiActionView.kt
@@ -1,10 +1,10 @@
-package com.tangem.tangemtest.commons.view
+package com.tangem.devkit.commons.view
import android.widget.TextView
import androidx.annotation.StringRes
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.StringId
-import com.tangem.tangemtest._arch.structure.abstraction.SafeValueChanged
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.StringId
+import com.tangem.devkit._arch.structure.abstraction.SafeValueChanged
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/AndroidComponents.kt b/tangem-devkit/src/main/java/com/tangem/devkit/extensions/AndroidComponents.kt
similarity index 55%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/extensions/AndroidComponents.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/extensions/AndroidComponents.kt
index 3a9205574c..c24ff4494c 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/AndroidComponents.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/extensions/AndroidComponents.kt
@@ -1,5 +1,8 @@
-package com.tangem.tangemtest.extensions
+package com.tangem.devkit.extensions
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
import android.content.Intent
import androidx.activity.ComponentActivity
import androidx.fragment.app.Fragment
@@ -7,6 +10,13 @@ import androidx.fragment.app.Fragment
/**
[REDACTED_AUTHOR]
*/
+fun Context.copyToClipboard(value: Any, label: String = "") {
+ val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager ?: return
+
+ val clip: ClipData = ClipData.newPlainText(label, value.toString())
+ clipboard.setPrimaryClip(clip)
+}
+
fun Fragment.shareText(text: String) {
requireActivity().shareText(text)
}
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt b/tangem-devkit/src/main/java/com/tangem/devkit/extensions/List.kt
similarity index 90%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/extensions/List.kt
index d637d6f89a..f40be815b4 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/extensions/List.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.extensions
+package com.tangem.devkit.extensions
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/view/Transitions.kt b/tangem-devkit/src/main/java/com/tangem/devkit/extensions/view/Transitions.kt
similarity index 87%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/extensions/view/Transitions.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/extensions/view/Transitions.kt
index d58f12aa97..1a6762eca0 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/view/Transitions.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/extensions/view/Transitions.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.extensions.view
+package com.tangem.devkit.extensions.view
import android.view.ViewGroup
import androidx.transition.AutoTransition
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/NavigationOp.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/NavigationOp.kt
similarity index 85%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/NavigationOp.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/NavigationOp.kt
index fa588f2b68..c006bf6aa4 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/NavigationOp.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/NavigationOp.kt
@@ -1,8 +1,8 @@
-package com.tangem.tangemtest.ucase
+package com.tangem.devkit.ucase
import androidx.navigation.NavOptions
import androidx.navigation.navOptions
-import com.tangem.tangemtest.R
+import com.tangem.devkit.R
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/Action.kt
similarity index 72%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/Action.kt
index e8358b8071..f0c92ad43e 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/Action.kt
@@ -1,14 +1,14 @@
-package com.tangem.tangemtest.ucase.domain.actions
+package com.tangem.devkit.ucase.domain.actions
import com.tangem.TangemSdk
import com.tangem.common.CompletionResult
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.Payload
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.afterAction.AfterActionModification
-import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.Payload
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.domain.paramsManager.triggers.afterAction.AfterActionModification
+import com.tangem.devkit.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence
/**
[REDACTED_AUTHOR]
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/CreateWalletAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/CreateWalletAction.kt
new file mode 100644
index 0000000000..0e02ca670f
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/CreateWalletAction.kt
@@ -0,0 +1,23 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+
+class CreateWalletAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val item = attrs.itemList.findItem(TlvId.CardId) ?: return
+ val cardId = item.viewModel.data as? String ?: return
+
+ attrs.tangemSdk.createWallet(cardId) { handleResult(payload, it, null, attrs, callback) }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/DepersonalizeAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/DepersonalizeAction.kt
similarity index 67%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/DepersonalizeAction.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/DepersonalizeAction.kt
index 5dd9d80fc1..d938eb85ad 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/DepersonalizeAction.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/DepersonalizeAction.kt
@@ -1,10 +1,10 @@
-package com.tangem.tangemtest.ucase.domain.actions
+package com.tangem.devkit.ucase.domain.actions
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.findItem
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.variants.TlvId
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
/**
[REDACTED_AUTHOR]
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/PersonalizeAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/PersonalizeAction.kt
new file mode 100644
index 0000000000..5e0519b5ce
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/PersonalizeAction.kt
@@ -0,0 +1,66 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit._arch.structure.impl.EditTextItem
+import com.tangem.devkit._arch.structure.impl.NumberItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.domain.paramsManager.PayloadKey
+import com.tangem.devkit.ucase.tunnel.ActionView
+import com.tangem.devkit.ucase.tunnel.ItemError
+import com.tangem.devkit.ucase.variants.personalize.CardNumberId
+import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationConfigConverter
+import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationJsonConverter
+import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
+import com.tangem.devkit.ucase.variants.personalize.dto.toCardConfig
+import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
+
+/**
+[REDACTED_AUTHOR]
+ */
+class PersonalizeAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val itemList = attrs.payload[PayloadKey.itemList] as? List- ?: return
+ val actionView = attrs.payload[PayloadKey.actionView] as? ActionView ?: return
+
+ if (!checkSeries(itemList)) {
+ actionView.showSnackbar(ItemError.BadSeries)
+ return
+ }
+ if (!checkNumber(itemList)) {
+ actionView.showSnackbar(ItemError.BadCardNumber)
+ return
+ }
+
+ val issuer = DefaultPersonalizationParams.issuer()
+ val acquirer = DefaultPersonalizationParams.acquirer()
+ val manufacturer = DefaultPersonalizationParams.manufacturer()
+
+ val config = PersonalizationConfigConverter().convert(itemList, PersonalizationConfig.default())
+ val jsonDto = PersonalizationJsonConverter().bToA(config)
+
+ attrs.tangemSdk.personalize(jsonDto.toCardConfig(), issuer, manufacturer, acquirer) {
+ handleResult(payload, it, null, attrs, callback)
+ }
+ }
+
+ private fun checkSeries(itemList: List
- ): Boolean {
+ val seriesItem = itemList.findItem(CardNumberId.Series) as? EditTextItem ?: return false
+ val data = seriesItem.getData() as? String ?: return false
+
+ seriesItem.setData(data.toUpperCase())
+ return data.length == 2 || data.length == 4
+ }
+
+ private fun checkNumber(itemList: List
- ): Boolean {
+ val seriesItem = itemList.findItem(CardNumberId.Series) as? EditTextItem ?: return false
+ val numberItem = itemList.findItem(CardNumberId.Number) as? NumberItem ?: return false
+ val seriesData = seriesItem.getData() as? String ?: return false
+ val numberData = stringOf(numberItem.getData() as? Number)
+
+ return if (seriesData.length == 2 && numberData.length > 13) false
+ else !(seriesData.length == 4 && numberData.length > 11)
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/PurgeWalletAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/PurgeWalletAction.kt
new file mode 100644
index 0000000000..4c2efe395e
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/PurgeWalletAction.kt
@@ -0,0 +1,23 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+
+class PurgeWalletAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val item = attrs.itemList.findItem(TlvId.CardId) ?: return
+ val cardId = item.viewModel.data as? String ?: return
+
+ attrs.tangemSdk.purgeWallet(cardId) { handleResult(payload, it, null, attrs, callback) }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadIssuerDataAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadIssuerDataAction.kt
new file mode 100644
index 0000000000..580e43d4f2
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadIssuerDataAction.kt
@@ -0,0 +1,23 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+
+class ReadIssuerDataAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val item = attrs.itemList.findItem(TlvId.CardId) ?: return
+ val cardId = item.viewModel.data as? String ?: return
+
+ attrs.tangemSdk.readIssuerData(cardId) { handleResult(payload, it, null, attrs, callback) }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadIssuerExtraDataAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadIssuerExtraDataAction.kt
new file mode 100644
index 0000000000..4483a0bd78
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadIssuerExtraDataAction.kt
@@ -0,0 +1,23 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+
+class ReadIssuerExtraDataAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val item = attrs.itemList.findItem(TlvId.CardId) ?: return
+ val cardId = item.viewModel.data as? String ?: return
+
+ attrs.tangemSdk.readIssuerExtraData(cardId) { handleResult(payload, it, null, attrs, callback) }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadUserDataAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadUserDataAction.kt
new file mode 100644
index 0000000000..6014c60757
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ReadUserDataAction.kt
@@ -0,0 +1,23 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+
+class ReadUserDataAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val item = attrs.itemList.findItem(TlvId.CardId) ?: return
+ val cardId = item.viewModel.data as? String ?: return
+
+ attrs.tangemSdk.readUserData(cardId) { handleResult(payload, it, null, attrs, callback) }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/ScanAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ScanAction.kt
similarity index 50%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/ScanAction.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ScanAction.kt
index 213fea8b63..5e4e42aa08 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/ScanAction.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/ScanAction.kt
@@ -1,8 +1,8 @@
-package com.tangem.tangemtest.ucase.domain.actions
+package com.tangem.devkit.ucase.domain.actions
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.afterAction.AfterScanModifier
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.domain.paramsManager.triggers.afterAction.AfterScanModifier
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/SignAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/SignAction.kt
similarity index 71%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/SignAction.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/SignAction.kt
index f44f36d1ee..a1cf64ae35 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/SignAction.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/SignAction.kt
@@ -1,10 +1,10 @@
-package com.tangem.tangemtest.ucase.domain.actions
+package com.tangem.devkit.ucase.domain.actions
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.findItem
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.variants.TlvId
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
/**
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteIssuerDataAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteIssuerDataAction.kt
new file mode 100644
index 0000000000..c93f5edfc1
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteIssuerDataAction.kt
@@ -0,0 +1,37 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.common.extensions.hexToBytes
+import com.tangem.common.extensions.toByteArray
+import com.tangem.crypto.sign
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
+import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
+
+class WriteIssuerDataAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val cardId = attrs.itemList.findItem(TlvId.CardId)?.viewModel?.data ?: return
+ val counter = (attrs.itemList.findItem(TlvId.Counter)?.viewModel?.data as? Int) ?: 1
+
+ val issuerDataItem = attrs.itemList.findItem(TlvId.IssuerData) ?: return
+ val issuerData = (issuerDataItem.getData() as? String)?.toByteArray() ?: return
+
+ val signedIssuerData = (
+ stringOf(cardId).hexToBytes() + issuerData + counter.toByteArray(4))
+ .sign(DefaultPersonalizationParams.issuer().dataKeyPair.privateKey)
+
+ attrs.tangemSdk.writeIssuerData(stringOf(cardId), issuerData, signedIssuerData, counter) {
+ handleResult(payload, it, null, attrs, callback)
+ }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteIssuerExtraDataAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteIssuerExtraDataAction.kt
new file mode 100644
index 0000000000..17c5052f9f
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteIssuerExtraDataAction.kt
@@ -0,0 +1,45 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.commands.WriteIssuerExtraDataCommand
+import com.tangem.common.extensions.hexToBytes
+import com.tangem.common.extensions.toByteArray
+import com.tangem.crypto.CryptoUtils
+import com.tangem.crypto.sign
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
+import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
+
+class WriteIssuerExtraDataAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val cardId = attrs.itemList.findItem(TlvId.CardId)?.viewModel?.data ?: return
+ val counter = (attrs.itemList.findItem(TlvId.Counter)?.viewModel?.data as? String)?.toInt() ?: 1
+
+ val issuerData = CryptoUtils.generateRandomBytes(WriteIssuerExtraDataCommand.SINGLE_WRITE_SIZE * 5)
+
+
+ val startingSignature = (
+ stringOf(cardId).hexToBytes() + counter.toByteArray(4) + issuerData.size.toByteArray(2))
+ .sign(DefaultPersonalizationParams.issuer().dataKeyPair.privateKey)
+
+ val finalizingSignature = (
+ stringOf(cardId).hexToBytes() + issuerData + counter.toByteArray(4))
+ .sign(DefaultPersonalizationParams.issuer().dataKeyPair.privateKey)
+
+ attrs.tangemSdk.writeIssuerExtraData(
+ stringOf(cardId), issuerData, startingSignature, finalizingSignature, counter
+ ) {
+ handleResult(payload, it, null, attrs, callback)
+ }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteUserDataAction.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteUserDataAction.kt
new file mode 100644
index 0000000000..d7d6da6107
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/actions/WriteUserDataAction.kt
@@ -0,0 +1,31 @@
+package com.tangem.devkit.ucase.domain.actions
+
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.TlvId
+import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
+
+class WriteUserDataAction : BaseAction() {
+ override fun executeMainAction(payload: PayloadHolder, attrs: AttrForAction, callback: ActionCallback) {
+ val userData = (attrs.itemList.findItem(TlvId.UserData)?.getData() as? String)?.toByteArray()
+ ?: return
+ val protectedUserData = (attrs.itemList.findItem(TlvId.ProtectedUserData)?.getData() as? String)?.toByteArray()
+ ?: return
+ val cardId = attrs.itemList.findItem(TlvId.CardId)?.viewModel?.data ?: return
+ val counter = (attrs.itemList.findItem(TlvId.Counter)?.viewModel?.data as? Int) ?: 1
+
+ attrs.tangemSdk.writeUserData(stringOf(cardId), userData, protectedUserData, counter, counter) {
+ handleResult(payload, it, null, attrs, callback)
+ }
+ }
+
+ override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? {
+ return when (id) {
+ TlvId.CardId -> { callback -> ScanAction().executeMainAction(payload, attrs, callback) }
+ TlvId.Counter -> { callback -> ReadUserDataAction().executeMainAction(payload, attrs, callback) }
+ else -> null
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/ItemsManager.kt
similarity index 73%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/ItemsManager.kt
index 20d2ed3eb8..35022b0af4 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/ItemsManager.kt
@@ -1,12 +1,12 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager
+package com.tangem.devkit.ucase.domain.paramsManager
import com.tangem.TangemSdk
import com.tangem.common.CompletionResult
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.Payload
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.Payload
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence
typealias ActionResponse = CompletionResult<*>
typealias AffectedList = List
-
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/BaseItemsManager.kt
similarity index 72%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/BaseItemsManager.kt
index a3308d623d..7fcba9d02c 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/BaseItemsManager.kt
@@ -1,18 +1,18 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager.managers
+package com.tangem.devkit.ucase.domain.paramsManager.managers
import androidx.lifecycle.LifecycleObserver
import com.tangem.TangemSdk
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.Payload
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.findItem
-import com.tangem.tangemtest._arch.structure.abstraction.iterate
-import com.tangem.tangemtest.ucase.domain.actions.Action
-import com.tangem.tangemtest.ucase.domain.actions.AttrForAction
-import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
-import com.tangem.tangemtest.ucase.domain.paramsManager.AffectedItemsCallback
-import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager
-import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.Payload
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit._arch.structure.abstraction.iterate
+import com.tangem.devkit.ucase.domain.actions.Action
+import com.tangem.devkit.ucase.domain.actions.AttrForAction
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.domain.paramsManager.AffectedItemsCallback
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
/**
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt
new file mode 100644
index 0000000000..90a1ceab7b
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt
@@ -0,0 +1,59 @@
+package com.tangem.devkit.ucase.domain.paramsManager.managers
+
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.OnLifecycleEvent
+import com.tangem.TangemSdk
+import com.tangem.devkit.commons.Store
+import com.tangem.devkit.ucase.domain.actions.PersonalizeAction
+import com.tangem.devkit.ucase.domain.paramsManager.ActionCallback
+import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationConfigConverter
+import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationJsonConverter
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationJson
+import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
+
+/**
+[REDACTED_AUTHOR]
+ */
+class PersonalizationItemsManager(
+ private val store: Store
+) : BaseItemsManager(PersonalizeAction()) {
+
+ private val converter = PersonalizationConfigConverter()
+
+ init {
+ val config = store.restore()
+ setItems(converter.convert(config))
+ }
+
+ override fun invokeMainAction(tangemSdk: TangemSdk, callback: ActionCallback) {
+ action.executeMainAction(this, getAttrsForAction(tangemSdk), callback)
+ }
+
+ fun importJsonConfig(jsonString: String) {
+ if (jsonString.isEmpty()) return
+
+ val jsonDto = try {
+ PersonalizationJson.getJsonConverter().fromJson(jsonString, PersonalizationJson::class.java)
+ } catch (ex: Exception) {
+ Log.e(this, "Can't convert imported string to Json object. Error: $ex")
+ return
+ }
+
+ val config = PersonalizationJsonConverter().aToB(jsonDto)
+ updateByItemList(converter.convert(config))
+ }
+
+ fun exportJsonConfig(): String {
+ val config = converter.convert(itemList, PersonalizationConfig.default())
+ val jsonDto = PersonalizationJsonConverter().bToA(config)
+ val jsonString = PersonalizationJson.getJsonConverter().toJson(jsonDto)
+ return jsonString
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+ fun onDestroy() {
+ val config = converter.convert(itemList, PersonalizationConfig.default())
+ store.save(config)
+ }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/SimpleManagers.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/SimpleManagers.kt
new file mode 100644
index 0000000000..a5085dccb2
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/managers/SimpleManagers.kt
@@ -0,0 +1,104 @@
+package com.tangem.devkit.ucase.domain.paramsManager.managers
+
+import com.tangem.devkit._arch.structure.impl.EditTextItem
+import com.tangem.devkit.ucase.domain.actions.*
+import com.tangem.devkit.ucase.domain.paramsManager.triggers.changeConsequence.CardIdConsequence
+import com.tangem.devkit.ucase.variants.TlvId
+
+/**
+[REDACTED_AUTHOR]
+ */
+class ScanItemsManager : BaseItemsManager(ScanAction())
+
+class DepersonalizeItemsManager : BaseItemsManager(DepersonalizeAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(EditTextItem(TlvId.CardId, null)))
+ }
+}
+
+class SignItemsManager : BaseItemsManager(SignAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(
+ EditTextItem(TlvId.CardId, null),
+ EditTextItem(TlvId.TransactionOutHash, "Data used for hashing")
+ ))
+ }
+}
+
+class CreateWalletItemsManager : BaseItemsManager(CreateWalletAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(EditTextItem(TlvId.CardId, null)))
+ }
+}
+
+class PurgeWalletItemsManager : BaseItemsManager(PurgeWalletAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(EditTextItem(TlvId.CardId, null)))
+ }
+}
+
+class ReadIssuerDataItemsManager : BaseItemsManager(ReadIssuerDataAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(EditTextItem(TlvId.CardId, null)))
+ }
+}
+
+class WriteIssuerDataItemsManager : BaseItemsManager(WriteIssuerDataAction()) {
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(
+ EditTextItem(TlvId.CardId, null),
+ EditTextItem(TlvId.IssuerData, "Data to be written on a card as issuer data"),
+ EditTextItem(TlvId.Counter, "1")
+ ))
+ }
+}
+
+class ReadIssuerExtraDataItemsManager : BaseItemsManager(ReadIssuerExtraDataAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(EditTextItem(TlvId.CardId, null)))
+ }
+}
+
+class WriteIssuerExtraDataItemsManager : BaseItemsManager(WriteIssuerExtraDataAction()) {
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(
+ EditTextItem(TlvId.CardId, null),
+ EditTextItem(TlvId.Counter, "1")
+ ))
+ }
+}
+
+class ReadUserDataItemsManager : BaseItemsManager(ReadUserDataAction()) {
+
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(EditTextItem(TlvId.CardId, null)))
+ }
+}
+
+class WriteUserDataItemsManager : BaseItemsManager(WriteUserDataAction()) {
+ init {
+ setItemChangeConsequences(CardIdConsequence())
+ setItems(listOf(
+ EditTextItem(TlvId.CardId, null),
+ EditTextItem(TlvId.Counter, "1"),
+ EditTextItem(TlvId.UserData, "User data to be written on a card"),
+ EditTextItem(TlvId.ProtectedUserData, "Protected user data to be written on a card")
+
+ ))
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/afterAction/AfterActionModifiers.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/afterAction/AfterActionModifiers.kt
similarity index 66%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/afterAction/AfterActionModifiers.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/afterAction/AfterActionModifiers.kt
index 48ab757ff0..74940b79d1 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/afterAction/AfterActionModifiers.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/afterAction/AfterActionModifiers.kt
@@ -1,8 +1,8 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager.triggers.afterAction
+package com.tangem.devkit.ucase.domain.paramsManager.triggers.afterAction
import com.tangem.common.CompletionResult
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.Item
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/afterAction/AfterScanModifier.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/afterAction/AfterScanModifier.kt
similarity index 72%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/afterAction/AfterScanModifier.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/afterAction/AfterScanModifier.kt
index f63694fcc7..219f6a72c9 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/triggers/afterAction/AfterScanModifier.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/afterAction/AfterScanModifier.kt
@@ -1,15 +1,15 @@
-package com.tangem.tangemtest.ucase.domain.paramsManager.triggers.afterAction
+package com.tangem.devkit.ucase.domain.paramsManager.triggers.afterAction
import com.tangem.commands.Card
import com.tangem.commands.CardStatus
import com.tangem.common.CompletionResult
-import com.tangem.tangemtest._arch.structure.PayloadHolder
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.findItem
-import com.tangem.tangemtest.ucase.domain.paramsManager.PayloadKey
-import com.tangem.tangemtest.ucase.tunnel.ActionView
-import com.tangem.tangemtest.ucase.tunnel.CardError
-import com.tangem.tangemtest.ucase.variants.TlvId
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.abstraction.findItem
+import com.tangem.devkit.ucase.domain.paramsManager.PayloadKey
+import com.tangem.devkit.ucase.tunnel.ActionView
+import com.tangem.devkit.ucase.tunnel.CardError
+import com.tangem.devkit.ucase.variants.TlvId
import ru.dev.gbixahue.eu4d.lib.android.global.threading.postUI
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/changeConsequence/ParamChangeConsequence.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/changeConsequence/ParamChangeConsequence.kt
new file mode 100644
index 0000000000..6da18ea8b7
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/paramsManager/triggers/changeConsequence/ParamChangeConsequence.kt
@@ -0,0 +1,30 @@
+package com.tangem.devkit.ucase.domain.paramsManager.triggers.changeConsequence
+
+import com.tangem.devkit._arch.structure.PayloadHolder
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit.ucase.domain.paramsManager.PayloadKey
+import com.tangem.devkit.ucase.tunnel.ActionView
+import com.tangem.devkit.ucase.variants.TlvId
+import ru.dev.gbixahue.eu4d.lib.android.global.threading.postUI
+
+/**
+[REDACTED_AUTHOR]
+ *
+ * The ParamsChangeConsequence class family modifies parameters depending on the state
+ * of the incoming parameter
+ */
+interface ItemsChangeConsequence {
+ fun affectChanges(payload: PayloadHolder, changedItem: Item, itemList: List
- ): List
-
+}
+
+class CardIdConsequence : ItemsChangeConsequence {
+
+ override fun affectChanges(payload: PayloadHolder, changedItem: Item, itemList: List
- ): List
- {
+ val affectedList = mutableListOf
- ()
+ if (changedItem.id != TlvId.CardId) return affectedList
+
+ val cidDataIsNull = changedItem.getData() == null
+ postUI { (payload.get(PayloadKey.actionView) as? ActionView)?.enableActionFab(!cidDataIsNull) }
+ return affectedList
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/responses/ResponseJsonConverter.kt
similarity index 97%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/responses/ResponseJsonConverter.kt
index 5533c3682d..06ca8702e5 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/responses/ResponseJsonConverter.kt
@@ -1,9 +1,9 @@
-package com.tangem.tangemtest.ucase.domain.responses
+package com.tangem.devkit.ucase.domain.responses
import com.google.gson.*
import com.tangem.commands.*
import com.tangem.common.extensions.toHexString
-import com.tangem.tangemtest.extensions.print
+import com.tangem.devkit.extensions.print
import java.lang.reflect.Type
import java.text.DateFormat
import java.util.*
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/Ids.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/Ids.kt
similarity index 75%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/Ids.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/Ids.kt
index e686f0f8c3..1daedb6326 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/Ids.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/Ids.kt
@@ -1,6 +1,6 @@
-package com.tangem.tangemtest.ucase.resources
+package com.tangem.devkit.ucase.resources
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.Id
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/MainResourceHolder.kt
similarity index 68%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/MainResourceHolder.kt
index 86c7454365..e62d993f69 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/MainResourceHolder.kt
@@ -1,14 +1,14 @@
-package com.tangem.tangemtest.ucase.resources
+package com.tangem.devkit.ucase.resources
-import com.tangem.tangemtest.AppTangemDemo
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.StringId
-import com.tangem.tangemtest._arch.structure.StringResId
-import com.tangem.tangemtest.ucase.resources.initializers.ActionResources
-import com.tangem.tangemtest.ucase.resources.initializers.PersonalizationResources
-import com.tangem.tangemtest.ucase.resources.initializers.ResponseResources
-import com.tangem.tangemtest.ucase.resources.initializers.TlvResources
+import com.tangem.devkit.AppTangemDemo
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.StringId
+import com.tangem.devkit._arch.structure.StringResId
+import com.tangem.devkit.ucase.resources.initializers.ActionResources
+import com.tangem.devkit.ucase.resources.initializers.PersonalizationResources
+import com.tangem.devkit.ucase.resources.initializers.ResponseResources
+import com.tangem.devkit.ucase.resources.initializers.TlvResources
import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder
/**
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/ResourseTypes.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/ResourseTypes.kt
similarity index 85%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/ResourseTypes.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/ResourseTypes.kt
index 72fad2464a..8ba64f087d 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/ResourseTypes.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/ResourseTypes.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.ucase.resources
+package com.tangem.devkit.ucase.resources
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/ActionResources.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/ActionResources.kt
similarity index 88%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/ActionResources.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/ActionResources.kt
index 053710adf7..2d7adcea1c 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/ActionResources.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/ActionResources.kt
@@ -1,10 +1,10 @@
-package com.tangem.tangemtest.ucase.resources.initializers
+package com.tangem.devkit.ucase.resources.initializers
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest.ucase.resources.ActionRes
-import com.tangem.tangemtest.ucase.resources.ActionType
-import com.tangem.tangemtest.ucase.resources.ResourceHolder
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit.ucase.resources.ActionRes
+import com.tangem.devkit.ucase.resources.ActionType
+import com.tangem.devkit.ucase.resources.ResourceHolder
/**
[REDACTED_AUTHOR]
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/PersonalizationResources.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/PersonalizationResources.kt
new file mode 100644
index 0000000000..2319076b7b
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/PersonalizationResources.kt
@@ -0,0 +1,128 @@
+package com.tangem.devkit.ucase.resources.initializers
+
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit.ucase.resources.ResourceHolder
+import com.tangem.devkit.ucase.resources.Resources
+import com.tangem.devkit.ucase.variants.personalize.*
+import ru.dev.gbixahue.eu4d.lib.kotlin.common.TypedHolder
+
+/**
+[REDACTED_AUTHOR]
+ */
+class PersonalizationResources() {
+ fun init(holder: ResourceHolder) {
+ initBlock(holder)
+ initCardNumber(holder)
+ initCommon(holder)
+ initSigningMethod(holder)
+ initSignHashExProp(holder)
+ initToken(holder)
+ initProductMask(holder)
+ initSettingsMask(holder)
+ initSettingsMaskProtocolEnc(holder)
+ initSettingsMaskNdef(holder)
+ initPins(holder)
+ }
+
+ private fun initBlock(holder: TypedHolder) {
+ holder.register(BlockId.CardNumber, Resources(R.string.pers_block_card_number, R.string.info_pers_block_card_number))
+ holder.register(BlockId.Common, Resources(R.string.pers_block_common, R.string.info_pers_block_common))
+ holder.register(BlockId.SigningMethod, Resources(R.string.pers_block_signing_method, R.string.info_pers_block_signing_method))
+ holder.register(BlockId.SignHashExProp, Resources(R.string.pers_block_sign_hash_ex_prop, R.string.info_pers_block_sign_hash_ex_prop))
+ holder.register(BlockId.Denomination, Resources(R.string.pers_block_denomination, R.string.info_pers_block_denomination))
+ holder.register(BlockId.Token, Resources(R.string.pers_block_token, R.string.info_pers_block_token))
+ holder.register(BlockId.ProdMask, Resources(R.string.pers_block_product_mask, R.string.info_pers_block_product_mask))
+ holder.register(BlockId.SettingsMask, Resources(R.string.pers_block_settings_mask, R.string.info_pers_block_settings_mask))
+ holder.register(BlockId.SettingsMaskProtocolEnc, Resources(R.string.pers_block_settings_mask_protocol_enc, R.string.info_pers_block_settings_mask_protocol_enc))
+ holder.register(BlockId.SettingsMaskNdef, Resources(R.string.pers_block_settings_mask_ndef, R.string.info_pers_block_settings_mask_ndef))
+ holder.register(BlockId.Pins, Resources(R.string.pers_block_pins, R.string.info_pers_block_pins))
+ }
+
+ private fun initCardNumber(holder: TypedHolder) {
+ holder.register(CardNumberId.Series, Resources(R.string.pers_item_series, R.string.info_pers_item_series))
+ holder.register(CardNumberId.Number, Resources(R.string.pers_item_number, R.string.info_pers_item_number))
+ holder.register(CardNumberId.BatchId, Resources(R.string.pers_item_batch_id, R.string.info_pers_item_batch_id))
+ }
+
+ private fun initCommon(holder: TypedHolder) {
+ holder.register(CommonId.Curve, Resources(R.string.pers_item_curve, R.string.info_pers_item_curve))
+ holder.register(CommonId.Blockchain, Resources(R.string.pers_item_blockchain, R.string.info_pers_item_blockchain))
+ holder.register(CommonId.BlockchainCustom, Resources(R.string.pers_item_custom_blockchain, R.string.info_pers_item_custom_blockchain))
+ holder.register(CommonId.MaxSignatures, Resources(R.string.pers_item_max_signatures, R.string.info_pers_item_max_signatures))
+ holder.register(CommonId.CreateWallet, Resources(R.string.pers_item_create_wallet, R.string.info_pers_item_create_wallet))
+ }
+
+ private fun initSigningMethod(holder: TypedHolder) {
+ holder.register(SigningMethodId.SignTx, Resources(R.string.pers_item_sign_tx_hashes, R.string.info_pers_item_sign_tx_hashes))
+ holder.register(SigningMethodId.SignTxRaw, Resources(R.string.pers_item_sign_raw_tx, R.string.info_pers_item_sign_raw_tx))
+ holder.register(SigningMethodId.SignValidatedTx, Resources(R.string.pers_item_sign_validated_tx_hashes, R.string.info_pers_item_sign_validated_tx_hashes))
+ holder.register(SigningMethodId.SignValidatedTxRaw, Resources(R.string.pers_item_sign_validated_raw_tx, R.string.info_pers_item_sign_validated_raw_tx))
+ holder.register(SigningMethodId.SignValidatedTxIssuer, Resources(R.string.pers_item_sign_validated_tx_hashes_with_iss_data, R.string.info_pers_item_sign_validated_tx_hashes_with_iss_data))
+ holder.register(SigningMethodId.SignValidatedTxRawIssuer, Resources(R.string.pers_item_sign_validated_raw_tx_with_iss_data, R.string.info_pers_item_sign_validated_raw_tx_with_iss_data))
+ holder.register(SigningMethodId.SignExternal, Resources(R.string.pers_item_sign_hash_ex, R.string.info_pers_item_sign_hash_ex))
+ }
+
+ private fun initSignHashExProp(holder: TypedHolder) {
+ holder.register(SignHashExPropId.PinLessFloorLimit, Resources(R.string.pers_item_pin_less_floor_limit, R.string.info_pers_item_pin_less_floor_limit))
+ holder.register(SignHashExPropId.CryptoExKey, Resources(R.string.pers_item_cr_ex_key, R.string.info_pers_item_cr_ex_key))
+ holder.register(SignHashExPropId.RequireTerminalCertSig, Resources(R.string.pers_item_require_terminal_cert_sig, R.string.info_pers_item_require_terminal_cert_sig))
+ holder.register(SignHashExPropId.RequireTerminalTxSig, Resources(R.string.pers_item_require_terminal_tx_sig, R.string.info_pers_item_require_terminal_tx_sig))
+ holder.register(SignHashExPropId.CheckPin3, Resources(R.string.pers_item_check_pin3_on_card, R.string.info_pers_item_check_pin3_on_card))
+ }
+
+ private fun initToken(holder: TypedHolder) {
+ holder.register(TokenId.ItsToken, Resources(R.string.pers_item_its_token, R.string.info_pers_item_its_token))
+ holder.register(TokenId.Symbol, Resources(R.string.pers_item_symbol, R.string.info_pers_item_symbol))
+ holder.register(TokenId.ContractAddress, Resources(R.string.pers_item_contract_address, R.string.info_pers_item_contract_address))
+ holder.register(TokenId.Decimal, Resources(R.string.pers_item_decimal, R.string.info_pers_item_decimal))
+ }
+
+ private fun initProductMask(holder: TypedHolder) {
+ holder.register(ProductMaskId.Note, Resources(R.string.pers_item_note, R.string.info_pers_item_note))
+ holder.register(ProductMaskId.Tag, Resources(R.string.pers_item_tag, R.string.info_pers_item_tag))
+ holder.register(ProductMaskId.IdCard, Resources(R.string.pers_item_id_card, R.string.info_pers_item_id_card))
+ holder.register(ProductMaskId.IdIssuerCard, Resources(R.string.pers_item_id_issuer_card, R.string.info_pers_item_id_issuer_card))
+ }
+
+ private fun initSettingsMask(holder: TypedHolder) {
+ holder.register(SettingsMaskId.IsReusable, Resources(R.string.pers_item_is_reusable, R.string.info_pers_item_is_reusable))
+ holder.register(SettingsMaskId.NeedActivation, Resources(R.string.pers_item_need_activation, R.string.info_pers_item_need_activation))
+ holder.register(SettingsMaskId.ForbidPurge, Resources(R.string.pers_item_forbid_purge, R.string.info_pers_item_forbid_purge))
+ holder.register(SettingsMaskId.AllowSelectBlockchain, Resources(R.string.pers_item_allow_select_blockchain, R.string.info_pers_item_allow_select_blockchain))
+ holder.register(SettingsMaskId.UseBlock, Resources(R.string.pers_item_use_block, R.string.info_pers_item_use_block))
+ holder.register(SettingsMaskId.OneApdu, Resources(R.string.pers_item_one_apdu_at_once, R.string.info_pers_item_one_apdu_at_once))
+ holder.register(SettingsMaskId.UseCvc, Resources(R.string.pers_item_use_cvc, R.string.info_pers_item_use_cvc))
+ holder.register(SettingsMaskId.AllowSwapPin, Resources(R.string.pers_item_allow_swap_pin, R.string.info_pers_item_allow_swap_pin))
+ holder.register(SettingsMaskId.AllowSwapPin2, Resources(R.string.pers_item_allow_swap_pin2, R.string.info_pers_item_allow_swap_pin2))
+ holder.register(SettingsMaskId.ForbidDefaultPin, Resources(R.string.pers_item_forbid_default_pin, R.string.info_pers_item_forbid_default_pin))
+ holder.register(SettingsMaskId.SmartSecurityDelay, Resources(R.string.pers_item_smart_security_delay, R.string.info_pers_item_smart_security_delay))
+ holder.register(SettingsMaskId.ProtectIssuerDataAgainstReplay, Resources(R.string.pers_item_protect_issuer_data_against_replay, R.string.info_pers_item_protect_issuer_data_against_replay))
+ holder.register(SettingsMaskId.SkipSecurityDelayIfValidated, Resources(R.string.pers_item_skip_security_delay_if_validated, R.string.info_pers_item_skip_security_delay_if_validated))
+ holder.register(SettingsMaskId.SkipPin2CvcIfValidated, Resources(R.string.pers_item_skip_pin2_and_cvc_if_validated, R.string.info_pers_item_skip_pin2_and_cvc_if_validated))
+ holder.register(SettingsMaskId.SkipSecurityDelayOnLinkedTerminal, Resources(R.string.pers_item_skip_security_delay_on_linked_terminal, R.string.info_pers_item_skip_security_delay_on_linked_terminal))
+ holder.register(SettingsMaskId.RestrictOverwriteExtraIssuerData, Resources(R.string.pers_item_restrict_overwrite_ex_issuer_data, R.string.info_pers_item_restrict_overwrite_ex_issuer_data))
+ }
+
+ private fun initSettingsMaskProtocolEnc(holder: TypedHolder) {
+ holder.register(SettingsMaskProtocolEncId.AllowUnencrypted, Resources(R.string.pers_item_allow_unencrypted, R.string.info_pers_item_allow_unencrypted))
+ holder.register(SettingsMaskProtocolEncId.AllowStaticEncryption, Resources(R.string.pers_item_allow_fast_encryption, R.string.info_pers_item_allow_fast_encryption))
+ }
+
+ private fun initSettingsMaskNdef(holder: TypedHolder) {
+ holder.register(SettingsMaskNdefId.UseNdef, Resources(R.string.pers_item_use_ndef, R.string.info_pers_item_use_ndef))
+ holder.register(SettingsMaskNdefId.DynamicNdef, Resources(R.string.pers_item_dynamic_ndef, R.string.info_pers_item_dynamic_ndef))
+ holder.register(SettingsMaskNdefId.DisablePrecomputedNdef, Resources(R.string.pers_item_disable_precomputed_ndef, R.string.info_pers_item_disable_precomputed_ndef))
+ holder.register(SettingsMaskNdefId.Aar, Resources(R.string.pers_item_aar, R.string.info_pers_item_aar))
+ holder.register(SettingsMaskNdefId.AarCustom, Resources(R.string.pers_item_custom_aar_package_name, R.string.info_pers_item_custom_aar_package_name))
+ holder.register(SettingsMaskNdefId.Uri, Resources(R.string.pers_item_uri, R.string.info_pers_item_uri))
+ }
+
+ private fun initPins(holder: TypedHolder) {
+ holder.register(PinsId.Pin, Resources(R.string.pers_item_pin, R.string.info_pers_item_pin))
+ holder.register(PinsId.Pin2, Resources(R.string.pers_item_pin2, R.string.info_pers_item_pin2))
+ holder.register(PinsId.Pin3, Resources(R.string.pers_item_pin3, R.string.info_pers_item_pin3))
+ holder.register(PinsId.Cvc, Resources(R.string.pers_item_cvc, R.string.info_pers_item_cvc))
+ holder.register(PinsId.PauseBeforePin2, Resources(R.string.pers_item_pause_before_pin2, R.string.info_pers_item_pause_before_pin2))
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/ResponseResources.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/ResponseResources.kt
similarity index 58%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/ResponseResources.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/ResponseResources.kt
index a199a04a26..792a4ee0cb 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/initializers/ResponseResources.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/ResponseResources.kt
@@ -1,12 +1,9 @@
-package com.tangem.tangemtest.ucase.resources.initializers
+package com.tangem.devkit.ucase.resources.initializers
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest.ucase.resources.MainResourceHolder
-import com.tangem.tangemtest.ucase.resources.Resources
-import com.tangem.tangemtest.ucase.variants.responses.CardDataId
-import com.tangem.tangemtest.ucase.variants.responses.CardId
-import com.tangem.tangemtest.ucase.variants.responses.DepersonalizeId
-import com.tangem.tangemtest.ucase.variants.responses.SignId
+import com.tangem.devkit.R
+import com.tangem.devkit.ucase.resources.MainResourceHolder
+import com.tangem.devkit.ucase.resources.Resources
+import com.tangem.devkit.ucase.variants.responses.*
/**
[REDACTED_AUTHOR]
@@ -17,6 +14,13 @@ class ResponseResources {
initCardData(holder)
initSignResponse(holder)
initDepersonalizeResponse(holder)
+ initCreateWalletResponse(holder)
+ initPurgeWalletResponse(holder)
+ initReadIssuerDataResponse(holder)
+ initWriteIssuerDataResponse(holder)
+ initReadIssuerExtraDataResponse(holder)
+ initReadUserDataResponse(holder)
+ initWriteUserDataResponse(holder)
}
private fun initCard(holder: MainResourceHolder) {
@@ -65,4 +69,46 @@ class ResponseResources {
private fun initDepersonalizeResponse(holder: MainResourceHolder) {
holder.register(DepersonalizeId.isSuccess, Resources(R.string.response_depersonalize_is_success, R.string.info_response_depersonalize_is_success))
}
+
+ private fun initCreateWalletResponse(holder: MainResourceHolder) {
+ holder.register(CreateWalletId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ holder.register(CreateWalletId.cardStatus, Resources(R.string.response_card_status, R.string.info_response_card_status))
+ holder.register(CreateWalletId.walletPublicKey, Resources(R.string.response_card_wallet_public_key, R.string.info_response_card_wallet_public_key))
+ }
+
+ private fun initPurgeWalletResponse(holder: MainResourceHolder) {
+ holder.register(PurgeWalletId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ holder.register(PurgeWalletId.cardStatus, Resources(R.string.response_card_status, R.string.info_response_card_status))
+ }
+
+ private fun initReadIssuerDataResponse(holder: MainResourceHolder) {
+ holder.register(ReadIssuerDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ holder.register(ReadIssuerDataId.issuerData, Resources(R.string.response_issuer_data, R.string.info_response_issuer_data))
+ holder.register(ReadIssuerDataId.issuerDataSignature, Resources(R.string.response_issuer_data_signature, R.string.info_response_issuer_data_signature))
+ holder.register(ReadIssuerDataId.issuerDataCounter, Resources(R.string.response_issuer_data_counter, R.string.info_response_issuer_data_counter))
+ }
+
+ private fun initWriteIssuerDataResponse(holder: MainResourceHolder) {
+ holder.register(ReadIssuerDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ }
+
+ private fun initReadIssuerExtraDataResponse(holder: MainResourceHolder) {
+ holder.register(ReadIssuerExtraDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ holder.register(ReadIssuerExtraDataId.size, Resources(R.string.response_issuer_data_size, R.string.info_response_issuer_data_size))
+ holder.register(ReadIssuerExtraDataId.issuerData, Resources(R.string.response_issuer_data, R.string.info_response_issuer_data))
+ holder.register(ReadIssuerExtraDataId.issuerDataSignature, Resources(R.string.response_issuer_data_signature, R.string.info_response_issuer_data_signature))
+ holder.register(ReadIssuerExtraDataId.issuerDataCounter, Resources(R.string.response_issuer_data_counter, R.string.info_response_issuer_data_counter))
+ }
+
+ private fun initReadUserDataResponse(holder: MainResourceHolder) {
+ holder.register(ReadUserDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ holder.register(ReadUserDataId.userData, Resources(R.string.response_user_data, R.string.info_response_user_data))
+ holder.register(ReadUserDataId.userProtectedData, Resources(R.string.response_user_protected_data, R.string.info_response_user_protected_data))
+ holder.register(ReadUserDataId.userCounter, Resources(R.string.response_user_data_counter, R.string.info_response_user_data_counter))
+ holder.register(ReadUserDataId.userProtectedCounter, Resources(R.string.response_user_data_protected_counter, R.string.info_response_user_data_protected_counter))
+ }
+
+ private fun initWriteUserDataResponse(holder: MainResourceHolder) {
+ holder.register(ReadIssuerDataId.cid, Resources(R.string.response_card_cid, R.string.info_response_card_cid))
+ }
}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt
new file mode 100644
index 0000000000..32bb68d840
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/resources/initializers/TlvResources.kt
@@ -0,0 +1,24 @@
+package com.tangem.devkit.ucase.resources.initializers
+
+import com.tangem.devkit.R
+import com.tangem.devkit.ucase.resources.MainResourceHolder
+import com.tangem.devkit.ucase.resources.Resources
+import com.tangem.devkit.ucase.variants.TlvId
+
+/**
+[REDACTED_AUTHOR]
+ */
+class TlvResources {
+ fun init(holder: MainResourceHolder) {
+ initScan(holder)
+ }
+
+ private fun initScan(holder: MainResourceHolder) {
+ holder.register(TlvId.CardId, Resources(R.string.tlv_card_id, R.string.info_tlv_card_id))
+ holder.register(TlvId.TransactionOutHash, Resources(R.string.tlv_transaction_out_hash, R.string.info_tlv_transaction_out_hash))
+ holder.register(TlvId.Counter, Resources(R.string.tlv_counter, R.string.info_tlv_counter))
+ holder.register(TlvId.IssuerData, Resources(R.string.tlv_issuer_data, R.string.info_tlv_issuer_data))
+ holder.register(TlvId.UserData, Resources(R.string.tlv_issuer_data, R.string.info_tlv_user_data))
+ holder.register(TlvId.ProtectedUserData, Resources(R.string.tlv_user_protected_data, R.string.info_tlv_protected_user_data))
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/tunnel/Errors.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/tunnel/Errors.kt
similarity index 65%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/tunnel/Errors.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/tunnel/Errors.kt
index 8ae2a5370a..72cbde4699 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/tunnel/Errors.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/tunnel/Errors.kt
@@ -1,6 +1,6 @@
-package com.tangem.tangemtest.ucase.tunnel
+package com.tangem.devkit.ucase.tunnel
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.Id
/**
[REDACTED_AUTHOR]
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/tunnel/ViewScreen.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/tunnel/ViewScreen.kt
similarity index 81%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/tunnel/ViewScreen.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/tunnel/ViewScreen.kt
index 53ab0b4883..64aa754c6b 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/tunnel/ViewScreen.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/tunnel/ViewScreen.kt
@@ -1,7 +1,7 @@
-package com.tangem.tangemtest.ucase.tunnel
+package com.tangem.devkit.ucase.tunnel
import com.google.android.material.snackbar.Snackbar
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.Id
interface SnackbarHolder {
fun showSnackbar(message: String, length: Int = Snackbar.LENGTH_SHORT)
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt
similarity index 87%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt
index 80e1840a9d..3c04d86d59 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.ucase.ui
+package com.tangem.devkit.ucase.ui
import android.view.View
import androidx.annotation.UiThread
@@ -9,17 +9,19 @@ import com.tangem.TangemSdk
import com.tangem.commands.Card
import com.tangem.commands.CommandResponse
import com.tangem.common.CompletionResult
-import com.tangem.tangemtest._arch.SingleLiveEvent
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.Payload
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.abstraction.iterate
-import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager
-import com.tangem.tangemtest.ucase.domain.responses.ResponseJsonConverter
-import com.tangem.tangemtest.ucase.resources.ActionType
-import com.tangem.tangemtest.ucase.tunnel.ViewScreen
-import com.tangem.tangemtest.ucase.variants.personalize.converter.ItemTypes
+import com.tangem.common.extensions.CardType
+import com.tangem.devkit._arch.SingleLiveEvent
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.Payload
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.abstraction.iterate
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.responses.ResponseJsonConverter
+import com.tangem.devkit.ucase.resources.ActionType
+import com.tangem.devkit.ucase.tunnel.ViewScreen
+import com.tangem.devkit.ucase.variants.personalize.converter.ItemTypes
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
+import java.util.*
/**
[REDACTED_AUTHOR]
@@ -43,6 +45,7 @@ class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif
fun setCardManager(tangemSdk: TangemSdk) {
this.tangemSdk = tangemSdk
+ this.tangemSdk.config.cardFilter.allowedCardTypes = EnumSet.of(CardType.Sdk)
}
@Deprecated("Events must be send directly from the Widget")
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/BaseCardActionFragment.kt
similarity index 91%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/BaseCardActionFragment.kt
index 32c0746431..36cf46321e 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/BaseCardActionFragment.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.ucase.ui
+package com.tangem.devkit.ucase.ui
import android.os.Bundle
import android.view.LayoutInflater
@@ -13,15 +13,15 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.tangem.TangemSdk
import com.tangem.commands.Card
import com.tangem.commands.CommandResponse
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._main.MainViewModel
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.PayloadKey
+import com.tangem.devkit.ucase.tunnel.ActionView
+import com.tangem.devkit.ucase.tunnel.CardError
+import com.tangem.devkit.ucase.ui.widgets.ParameterWidget
import com.tangem.tangem_sdk_new.extensions.init
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._main.MainViewModel
-import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager
-import com.tangem.tangemtest.ucase.domain.paramsManager.PayloadKey
-import com.tangem.tangemtest.ucase.tunnel.ActionView
-import com.tangem.tangemtest.ucase.tunnel.CardError
-import com.tangem.tangemtest.ucase.ui.widgets.ParameterWidget
import ru.dev.gbixahue.eu4d.lib.android._android.views.enable
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
@@ -140,7 +140,7 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView {
})
}
- private fun inflateParamView(where: ViewGroup): ViewGroup {
+ protected fun inflateParamView(where: ViewGroup): ViewGroup {
val inflater = LayoutInflater.from(where.context)
val view = inflater.inflate(R.layout.w_card_incoming_param, where, false)
where.plusAssign(view)
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/BaseFragment.kt
similarity index 88%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseFragment.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/BaseFragment.kt
index 29dfeec6be..e3b6f16cad 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseFragment.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/BaseFragment.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.ucase.ui
+package com.tangem.devkit.ucase.ui
import android.os.Bundle
import android.view.LayoutInflater
@@ -8,8 +8,8 @@ import androidx.fragment.app.Fragment
import androidx.navigation.NavOptions
import androidx.navigation.fragment.NavHostFragment.findNavController
import com.google.android.material.snackbar.Snackbar
-import com.tangem.tangemtest.ucase.getDefaultNavigationOptions
-import com.tangem.tangemtest.ucase.tunnel.SnackbarHolder
+import com.tangem.devkit.ucase.getDefaultNavigationOptions
+import com.tangem.devkit.ucase.tunnel.SnackbarHolder
import ru.dev.gbixahue.eu4d.lib.kotlin.common.LayoutHolder
/**
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/widgets/ParameterWidget.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/widgets/ParameterWidget.kt
similarity index 89%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/widgets/ParameterWidget.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/widgets/ParameterWidget.kt
index ab01e1a692..366a99e449 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/widgets/ParameterWidget.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/widgets/ParameterWidget.kt
@@ -1,4 +1,4 @@
-package com.tangem.tangemtest.ucase.ui.widgets
+package com.tangem.devkit.ucase.ui.widgets
import android.text.Editable
import android.text.TextWatcher
@@ -8,14 +8,14 @@ import android.widget.Button
import android.widget.TextView
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
-import com.tangem.tangemtest.R
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.abstraction.Item
-import com.tangem.tangemtest._arch.structure.impl.EditTextItem
-import com.tangem.tangemtest.extensions.view.beginDelayedTransition
-import com.tangem.tangemtest.ucase.resources.ActionType
-import com.tangem.tangemtest.ucase.resources.MainResourceHolder
-import com.tangem.tangemtest.ucase.resources.Resources
+import com.tangem.devkit.R
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.abstraction.Item
+import com.tangem.devkit._arch.structure.impl.EditTextItem
+import com.tangem.devkit.extensions.view.beginDelayedTransition
+import com.tangem.devkit.ucase.resources.ActionType
+import com.tangem.devkit.ucase.resources.MainResourceHolder
+import com.tangem.devkit.ucase.resources.Resources
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
@@ -56,6 +56,7 @@ class ParameterWidget(
btnAction.setText(getResNameId(ActionType.Scan))
toggleActionBtnVisibility()
initDescriptionWidget()
+ parent.tag = Id.getTag(typedItem.id)
}
fun changeParamValue(data: Any?, silent: Boolean = true) {
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/Ids.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/Ids.kt
new file mode 100644
index 0000000000..2200b40724
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/Ids.kt
@@ -0,0 +1,15 @@
+package com.tangem.devkit.ucase.variants
+
+import com.tangem.devkit._arch.structure.Id
+
+/**
+[REDACTED_AUTHOR]
+ */
+enum class TlvId : Id {
+ CardId,
+ TransactionOutHash,
+ IssuerData,
+ Counter,
+ UserData,
+ ProtectedUserData
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/createwallet/ui/CreateWalletActionFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/createwallet/ui/CreateWalletActionFragment.kt
new file mode 100644
index 0000000000..605f9dd649
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/createwallet/ui/CreateWalletActionFragment.kt
@@ -0,0 +1,10 @@
+package com.tangem.devkit.ucase.variants.createwallet.ui
+
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.managers.CreateWalletItemsManager
+import com.tangem.devkit.ucase.ui.BaseCardActionFragment
+
+class CreateWalletActionFragment : BaseCardActionFragment() {
+
+ override val itemsManager: ItemsManager by lazy { CreateWalletItemsManager() }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt
new file mode 100644
index 0000000000..802ba1e807
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt
@@ -0,0 +1,13 @@
+package com.tangem.devkit.ucase.variants.depersonalize.ui
+
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.managers.DepersonalizeItemsManager
+import com.tangem.devkit.ucase.ui.BaseCardActionFragment
+
+/**
+[REDACTED_AUTHOR]
+ */
+class DepersonalizeActionFragment : BaseCardActionFragment() {
+
+ override val itemsManager: ItemsManager by lazy { DepersonalizeItemsManager() }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/ReadIssuerDataFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/ReadIssuerDataFragment.kt
new file mode 100644
index 0000000000..6d3ac9be86
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/ReadIssuerDataFragment.kt
@@ -0,0 +1,10 @@
+package com.tangem.devkit.ucase.variants.issuerdata.ui
+
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.managers.ReadIssuerDataItemsManager
+import com.tangem.devkit.ucase.ui.BaseCardActionFragment
+
+class ReadIssuerDataFragment : BaseCardActionFragment() {
+
+ override val itemsManager: ItemsManager by lazy { ReadIssuerDataItemsManager() }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/ReadIssuerExtraDataFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/ReadIssuerExtraDataFragment.kt
new file mode 100644
index 0000000000..74024ca176
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/ReadIssuerExtraDataFragment.kt
@@ -0,0 +1,10 @@
+package com.tangem.devkit.ucase.variants.issuerdata.ui
+
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.managers.ReadIssuerExtraDataItemsManager
+import com.tangem.devkit.ucase.ui.BaseCardActionFragment
+
+class ReadIssuerExtraDataFragment : BaseCardActionFragment() {
+
+ override val itemsManager: ItemsManager by lazy { ReadIssuerExtraDataItemsManager() }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/WriteIssuerDataFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/WriteIssuerDataFragment.kt
new file mode 100644
index 0000000000..88e956818c
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/WriteIssuerDataFragment.kt
@@ -0,0 +1,10 @@
+package com.tangem.devkit.ucase.variants.issuerdata.ui
+
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.managers.WriteIssuerDataItemsManager
+import com.tangem.devkit.ucase.ui.BaseCardActionFragment
+
+class WriteIssuerDataFragment : BaseCardActionFragment() {
+
+ override val itemsManager: ItemsManager by lazy { WriteIssuerDataItemsManager() }
+}
\ No newline at end of file
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/WriteIssuerExtraDataFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/WriteIssuerExtraDataFragment.kt
new file mode 100644
index 0000000000..a90fce5e7a
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/issuerdata/ui/WriteIssuerExtraDataFragment.kt
@@ -0,0 +1,10 @@
+package com.tangem.devkit.ucase.variants.issuerdata.ui
+
+import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
+import com.tangem.devkit.ucase.domain.paramsManager.managers.WriteIssuerExtraDataItemsManager
+import com.tangem.devkit.ucase.ui.BaseCardActionFragment
+
+class WriteIssuerExtraDataFragment : BaseCardActionFragment() {
+
+ override val itemsManager: ItemsManager by lazy { WriteIssuerExtraDataItemsManager() }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/Ids.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/Ids.kt
similarity index 68%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/Ids.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/Ids.kt
index 6305b68975..fef98a3cbc 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/Ids.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/Ids.kt
@@ -1,6 +1,6 @@
-package com.tangem.tangemtest.ucase.variants.personalize
+package com.tangem.devkit.ucase.variants.personalize
-import com.tangem.tangemtest._arch.structure.Id
+import com.tangem.devkit._arch.structure.Id
/**
[REDACTED_AUTHOR]
@@ -22,13 +22,13 @@ enum class BlockId : PersonalizationId {
Pins,
}
-enum class CardNumber : PersonalizationId {
+enum class CardNumberId : PersonalizationId {
Series,
Number,
BatchId,
}
-enum class Common : PersonalizationId {
+enum class CommonId : PersonalizationId {
Curve,
Blockchain,
BlockchainCustom,
@@ -36,7 +36,7 @@ enum class Common : PersonalizationId {
CreateWallet,
}
-enum class SigningMethod : PersonalizationId {
+enum class SigningMethodId : PersonalizationId {
SignTx,
SignTxRaw,
SignValidatedTx,
@@ -46,7 +46,7 @@ enum class SigningMethod : PersonalizationId {
SignExternal,
}
-enum class SignHashExProp : PersonalizationId {
+enum class SignHashExPropId : PersonalizationId {
PinLessFloorLimit,
CryptoExKey,
RequireTerminalCertSig,
@@ -54,26 +54,21 @@ enum class SignHashExProp : PersonalizationId {
CheckPin3,
}
-enum class Denomination : PersonalizationId {
- WriteOnPersonalize,
- Denomination,
-}
-
-enum class Token : PersonalizationId {
+enum class TokenId : PersonalizationId {
ItsToken,
Symbol,
ContractAddress,
Decimal
}
-enum class ProductMask : PersonalizationId {
+enum class ProductMaskId : PersonalizationId {
Note,
Tag,
IdCard,
IdIssuerCard
}
-enum class SettingsMask : PersonalizationId {
+enum class SettingsMaskId : PersonalizationId {
IsReusable,
NeedActivation,
ForbidPurge,
@@ -92,12 +87,12 @@ enum class SettingsMask : PersonalizationId {
RestrictOverwriteExtraIssuerData,
}
-enum class SettingsMaskProtocolEnc : PersonalizationId {
+enum class SettingsMaskProtocolEncId : PersonalizationId {
AllowUnencrypted,
AllowStaticEncryption
}
-enum class SettingsMaskNdef : PersonalizationId {
+enum class SettingsMaskNdefId : PersonalizationId {
UseNdef,
DynamicNdef,
DisablePrecomputedNdef,
@@ -106,7 +101,7 @@ enum class SettingsMaskNdef : PersonalizationId {
Uri,
}
-enum class Pins : PersonalizationId {
+enum class PinsId : PersonalizationId {
Pin,
Pin2,
Pin3,
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/PersonalizationConfigStore.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/PersonalizationConfigStore.kt
similarity index 85%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/PersonalizationConfigStore.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/PersonalizationConfigStore.kt
index 9c774a8071..a0c9435a4f 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/PersonalizationConfigStore.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/PersonalizationConfigStore.kt
@@ -1,13 +1,13 @@
-package com.tangem.tangemtest.ucase.variants.personalize
+package com.tangem.devkit.ucase.variants.personalize
import android.content.Context
import android.content.SharedPreferences
import androidx.core.content.edit
import com.google.gson.Gson
-import com.tangem.tangemtest.AppTangemDemo
-import com.tangem.tangemtest.commons.KeyedStore
-import com.tangem.tangemtest.commons.Store
-import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizationConfig
+import com.tangem.devkit.AppTangemDemo
+import com.tangem.devkit.commons.KeyedStore
+import com.tangem.devkit.commons.Store
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
class PersonalizationConfigStore(context: Context) : Store, KeyedStore {
diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/DefaultValues.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/DefaultValues.kt
new file mode 100644
index 0000000000..7135d43975
--- /dev/null
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/DefaultValues.kt
@@ -0,0 +1,136 @@
+package com.tangem.devkit.ucase.variants.personalize.converter
+
+import com.tangem.commands.EllipticCurve
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.abstraction.KeyValue
+import com.tangem.devkit.ucase.variants.personalize.*
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationJson
+import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder
+
+/**
+[REDACTED_AUTHOR]
+ */
+class ConfigValuesHolder : BaseTypedHolder() {
+
+ // All registered association values can't be objects
+ fun init(default: PersonalizationConfig) {
+ register(CardNumberId.Series, Value(default.series))
+ register(CardNumberId.Number, Value(default.startNumber))
+ register(CardNumberId.BatchId, Value(default.cardData.batch))
+ register(CommonId.Curve, Value(default.curveID, Helper.listOfCurves()))
+ register(CommonId.Blockchain, Value(default.cardData.blockchain, Helper.listOfBlockchain()))
+ register(CommonId.BlockchainCustom, Value(default.blockchainCustom))
+ register(CommonId.MaxSignatures, Value(default.MaxSignatures))
+ register(CommonId.CreateWallet, Value(default.createWallet))
+ register(SigningMethodId.SignTx, Value(default.SigningMethod0))
+ register(SigningMethodId.SignTxRaw, Value(default.SigningMethod1))
+ register(SigningMethodId.SignValidatedTx, Value(default.SigningMethod2))
+ register(SigningMethodId.SignValidatedTxRaw, Value(default.SigningMethod3))
+ register(SigningMethodId.SignValidatedTxIssuer, Value(default.SigningMethod4))
+ register(SigningMethodId.SignValidatedTxRawIssuer, Value(default.SigningMethod5))
+ register(SigningMethodId.SignExternal, Value(default.SigningMethod6))
+ register(SignHashExPropId.PinLessFloorLimit, Value(default.pinLessFloorLimit))
+ register(SignHashExPropId.CryptoExKey, Value(default.hexCrExKey))
+ register(SignHashExPropId.RequireTerminalCertSig, Value(default.requireTerminalCertSignature))
+ register(SignHashExPropId.RequireTerminalTxSig, Value(default.requireTerminalTxSignature))
+ register(SignHashExPropId.CheckPin3, Value(default.checkPIN3onCard))
+ register(TokenId.ItsToken, Value(default.itsToken))
+ register(TokenId.Symbol, Value(default.cardData.token_symbol))
+ register(TokenId.ContractAddress, Value(default.cardData.token_contract_address))
+ register(TokenId.Decimal, Value(default.cardData.token_decimal))
+ register(ProductMaskId.Note, Value(default.cardData.product_note))
+ register(ProductMaskId.Tag, Value(default.cardData.product_tag))
+ register(ProductMaskId.IdCard, Value(default.cardData.product_id_card))
+ register(ProductMaskId.IdIssuerCard, Value(default.cardData.product_id_issuer))
+ register(SettingsMaskId.IsReusable, Value(default.isReusable))
+ register(SettingsMaskId.NeedActivation, Value(default.useActivation))
+ register(SettingsMaskId.ForbidPurge, Value(default.forbidPurgeWallet))
+ register(SettingsMaskId.AllowSelectBlockchain, Value(default.allowSelectBlockchain))
+ register(SettingsMaskId.UseBlock, Value(default.useBlock))
+ register(SettingsMaskId.OneApdu, Value(default.useOneCommandAtTime))
+ register(SettingsMaskId.UseCvc, Value(default.useCVC))
+ register(SettingsMaskId.AllowSwapPin, Value(default.allowSwapPIN))
+ register(SettingsMaskId.AllowSwapPin2, Value(default.allowSwapPIN2))
+ register(SettingsMaskId.ForbidDefaultPin, Value(default.forbidDefaultPIN))
+ register(SettingsMaskId.SmartSecurityDelay, Value(default.smartSecurityDelay))
+ register(SettingsMaskId.ProtectIssuerDataAgainstReplay, Value(default.protectIssuerDataAgainstReplay))
+ register(SettingsMaskId.SkipSecurityDelayIfValidated, Value(default.skipSecurityDelayIfValidatedByIssuer))
+ register(SettingsMaskId.SkipPin2CvcIfValidated, Value(default.skipCheckPIN2andCVCIfValidatedByIssuer))
+ register(SettingsMaskId.SkipSecurityDelayOnLinkedTerminal, Value(default.skipSecurityDelayIfValidatedByLinkedTerminal))
+ register(SettingsMaskId.RestrictOverwriteExtraIssuerData, Value(default.restrictOverwriteIssuerDataEx))
+ register(SettingsMaskProtocolEncId.AllowUnencrypted, Value(default.protocolAllowUnencrypted))
+ register(SettingsMaskProtocolEncId.AllowStaticEncryption, Value(default.protocolAllowStaticEncryption))
+ register(SettingsMaskNdefId.UseNdef, Value(default.useNDEF))
+ register(SettingsMaskNdefId.DynamicNdef, Value(default.useDynamicNDEF))
+ register(SettingsMaskNdefId.DisablePrecomputedNdef, Value(default.disablePrecomputedNDEF))
+ register(SettingsMaskNdefId.Aar, Value(default.aar, Helper.aarList()))
+ register(SettingsMaskNdefId.AarCustom, Value(default.aarCustom))
+ register(SettingsMaskNdefId.Uri, Value(default.uri))
+ register(PinsId.Pin, Value(default.PIN))
+ register(PinsId.Pin2, Value(default.PIN2))
+ register(PinsId.Pin3, Value(default.PIN3))
+ register(PinsId.Cvc, Value(default.CVC))
+ register(PinsId.PauseBeforePin2, Value(default.pauseBeforePIN2, Helper.pauseBeforePin()))
+ }
+}
+
+class Value(
+ private var value: Any? = null,
+ val list: List? = mutableListOf()
+) {
+ fun get(): Any? = value
+ fun set(newValue: Any?) {
+ value = newValue
+ }
+}
+
+internal class Helper {
+ companion object {
+ fun listOfCurves(): List {
+ return EllipticCurve.values().map { KeyValue(it.name, it.curve) }
+ }
+
+ fun listOfBlockchain(): List {
+ return mutableListOf(
+ KeyValue(PersonalizationJson.CUSTOM, PersonalizationJson.CUSTOM),
+ KeyValue("BTC", "BTC"),
+ KeyValue("BTC/test", "BTC/test"),
+ KeyValue("ETH", "ETH"),
+ KeyValue("ETH/test", "ETH/test"),
+ KeyValue("BCH", "BCH"),
+ KeyValue("BCH/test", "BCH/test"),
+ KeyValue("LTC", "LTC"),
+ KeyValue("XLM", "XLM"),
+ KeyValue("XLM/test", "XLM/test"),
+ KeyValue("RSK", "RSK"),
+ KeyValue("XPR", "XPR"),
+ KeyValue("CARDANO", "CARDANO"),
+ KeyValue("BNB", "BNB"),
+ KeyValue("XTZ", "XTZ"),
+ KeyValue("DUC", "DUC")
+ )
+ }
+
+ fun aarList(): List {
+ return mutableListOf(
+ KeyValue(PersonalizationJson.CUSTOM, PersonalizationJson.CUSTOM),
+ KeyValue("Release APP", "com.tangem.wallet"),
+ KeyValue("Debug APP", "com.tangem.wallet.debug"),
+ KeyValue("None", "")
+ )
+ }
+
+ fun pauseBeforePin(): List {
+ return mutableListOf(
+ KeyValue("immediately", 0L),
+ KeyValue("2 seconds", 2000L),
+ KeyValue("5 seconds", 5000L),
+ KeyValue("15 seconds", 15000L),
+ KeyValue("30 seconds", 30000L),
+ KeyValue("1 minute", 60000L),
+ KeyValue("2 minute", 120000L)
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/ItemTypes.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/ItemTypes.kt
similarity index 50%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/ItemTypes.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/ItemTypes.kt
index b1013de610..f8c304044c 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/ItemTypes.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/ItemTypes.kt
@@ -1,7 +1,7 @@
-package com.tangem.tangemtest.ucase.variants.personalize.converter
+package com.tangem.devkit.ucase.variants.personalize.converter
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest.ucase.variants.personalize.*
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit.ucase.variants.personalize.*
class ItemTypes {
@@ -11,37 +11,37 @@ class ItemTypes {
BlockId.SettingsMaskNdef, BlockId.Pins
)
- val listItemList = mutableListOf(Common.Curve, Common.Blockchain, SettingsMaskNdef.Aar, Pins.PauseBeforePin2)
+ val listItemList = mutableListOf(CommonId.Curve, CommonId.Blockchain, SettingsMaskNdefId.Aar, PinsId.PauseBeforePin2)
val boolList = mutableListOf(
- Common.CreateWallet, SigningMethod.SignTx, SigningMethod.SignTxRaw, SigningMethod.SignValidatedTx,
- SigningMethod.SignValidatedTxRaw, SigningMethod.SignValidatedTxIssuer,
- SigningMethod.SignValidatedTxRawIssuer, SigningMethod.SignExternal, SignHashExProp.RequireTerminalCertSig,
- SignHashExProp.RequireTerminalTxSig, SignHashExProp.CheckPin3, Denomination.WriteOnPersonalize, Token.ItsToken,
- ProductMask.Note, ProductMask.Tag, ProductMask.IdCard, ProductMask.IdIssuerCard, SettingsMask.IsReusable, SettingsMask.NeedActivation,
- SettingsMask.ForbidPurge, SettingsMask.AllowSelectBlockchain, SettingsMask.UseBlock, SettingsMask.OneApdu,
- SettingsMask.UseCvc, SettingsMask.AllowSwapPin, SettingsMask.AllowSwapPin2, SettingsMask.ForbidDefaultPin,
- SettingsMask.SmartSecurityDelay, SettingsMask.ProtectIssuerDataAgainstReplay,
- SettingsMask.SkipSecurityDelayIfValidated, SettingsMask.SkipPin2CvcIfValidated,
- SettingsMask.SkipSecurityDelayOnLinkedTerminal, SettingsMask.RestrictOverwriteExtraIssuerData,
- SettingsMaskProtocolEnc.AllowUnencrypted, SettingsMaskProtocolEnc.AllowStaticEncryption,
- SettingsMaskNdef.UseNdef, SettingsMaskNdef.DynamicNdef, SettingsMaskNdef.DisablePrecomputedNdef
+ CommonId.CreateWallet, SigningMethodId.SignTx, SigningMethodId.SignTxRaw, SigningMethodId.SignValidatedTx,
+ SigningMethodId.SignValidatedTxRaw, SigningMethodId.SignValidatedTxIssuer,
+ SigningMethodId.SignValidatedTxRawIssuer, SigningMethodId.SignExternal, SignHashExPropId.RequireTerminalCertSig,
+ SignHashExPropId.RequireTerminalTxSig, SignHashExPropId.CheckPin3, TokenId.ItsToken,
+ ProductMaskId.Note, ProductMaskId.Tag, ProductMaskId.IdCard, ProductMaskId.IdIssuerCard, SettingsMaskId.IsReusable, SettingsMaskId.NeedActivation,
+ SettingsMaskId.ForbidPurge, SettingsMaskId.AllowSelectBlockchain, SettingsMaskId.UseBlock, SettingsMaskId.OneApdu,
+ SettingsMaskId.UseCvc, SettingsMaskId.AllowSwapPin, SettingsMaskId.AllowSwapPin2, SettingsMaskId.ForbidDefaultPin,
+ SettingsMaskId.SmartSecurityDelay, SettingsMaskId.ProtectIssuerDataAgainstReplay,
+ SettingsMaskId.SkipSecurityDelayIfValidated, SettingsMaskId.SkipPin2CvcIfValidated,
+ SettingsMaskId.SkipSecurityDelayOnLinkedTerminal, SettingsMaskId.RestrictOverwriteExtraIssuerData,
+ SettingsMaskProtocolEncId.AllowUnencrypted, SettingsMaskProtocolEncId.AllowStaticEncryption,
+ SettingsMaskNdefId.UseNdef, SettingsMaskNdefId.DynamicNdef, SettingsMaskNdefId.DisablePrecomputedNdef
)
val editTextList = mutableListOf(
- CardNumber.Series, CardNumber.BatchId, Common.BlockchainCustom, SignHashExProp.CryptoExKey, Token.Symbol,
- Token.ContractAddress, Pins.Pin, Pins.Pin2, Pins.Pin3, Pins.Cvc, SettingsMaskNdef.AarCustom, SettingsMaskNdef.Uri
+ CardNumberId.Series, CardNumberId.BatchId, CommonId.BlockchainCustom, SignHashExPropId.CryptoExKey, TokenId.Symbol,
+ TokenId.ContractAddress, PinsId.Pin, PinsId.Pin2, PinsId.Pin3, PinsId.Cvc, SettingsMaskNdefId.AarCustom, SettingsMaskNdefId.Uri
)
val numberList = mutableListOf(
- CardNumber.Number, Common.MaxSignatures, SignHashExProp.PinLessFloorLimit, Denomination.Denomination, Token.Decimal
+ CardNumberId.Number, CommonId.MaxSignatures, SignHashExPropId.PinLessFloorLimit, TokenId.Decimal
)
val hiddenList = mutableListOf(
- CardNumber.Series, CardNumber.BatchId, Pins.Pin3, SigningMethod.SignExternal,
- SignHashExProp.CryptoExKey, SignHashExProp.CheckPin3, SettingsMask.OneApdu,
- SettingsMask.UseBlock, SettingsMask.ProtectIssuerDataAgainstReplay,
- SignHashExProp.RequireTerminalCertSig, SignHashExProp.RequireTerminalTxSig
+ CardNumberId.Series, CardNumberId.BatchId, PinsId.Pin3, SigningMethodId.SignExternal,
+ SignHashExPropId.CryptoExKey, SignHashExPropId.CheckPin3, SettingsMaskId.OneApdu,
+ SettingsMaskId.UseBlock, SettingsMaskId.ProtectIssuerDataAgainstReplay,
+ SignHashExPropId.RequireTerminalCertSig, SignHashExPropId.RequireTerminalTxSig
)
val oftenUsedList = listOf(
@@ -56,11 +56,11 @@ class ItemTypes {
// BlockId.SettingsMaskProtocolEnc,
BlockId.SettingsMaskNdef,
// BlockId.Pins,
- Common.Curve,
- Common.Blockchain,
- Common.BlockchainCustom,
+ CommonId.Curve,
+ CommonId.Blockchain,
+ CommonId.BlockchainCustom,
// Common.MaxSignatures,
- Common.CreateWallet,
+ CommonId.CreateWallet,
// SigningMethod.SignTx,
// SigningMethod.SignTxRaw,
// SigningMethod.SignValidatedTx,
@@ -79,10 +79,10 @@ class ItemTypes {
// Token.Symbol,
// Token.ContractAddress,
// Token.Decimal,
- ProductMask.Note,
- ProductMask.Tag,
- ProductMask.IdCard,
- ProductMask.IdIssuerCard,
+ ProductMaskId.Note,
+ ProductMaskId.Tag,
+ ProductMaskId.IdCard,
+ ProductMaskId.IdIssuerCard,
// SettingsMask.IsReusable,
// SettingsMask.NeedActivation,
// SettingsMask.ForbidPurge,
@@ -104,14 +104,14 @@ class ItemTypes {
// SettingsMaskNdef.UseNdef,
// SettingsMaskNdef.DynamicNdef,
// SettingsMaskNdef.DisablePrecomputedNdef,
- SettingsMaskNdef.Aar,
- SettingsMaskNdef.AarCustom,
- SettingsMaskNdef.Uri,
+ SettingsMaskNdefId.Aar,
+ SettingsMaskNdefId.AarCustom,
+ SettingsMaskNdefId.Uri,
// Pins.Pin,
// Pins.Pin2,
// Pins.Pin3,
// Pins.Cvc,
- Pins.PauseBeforePin2
+ PinsId.PauseBeforePin2
)
}
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/PersonalizationConfigConverter.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationConfigConverter.kt
similarity index 50%
rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/PersonalizationConfigConverter.kt
rename to tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationConfigConverter.kt
index 3d7fb1e3d1..e6733ed9f4 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/converter/PersonalizationConfigConverter.kt
+++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationConfigConverter.kt
@@ -1,11 +1,11 @@
-package com.tangem.tangemtest.ucase.variants.personalize.converter
+package com.tangem.devkit.ucase.variants.personalize.converter
-import com.tangem.tangemtest._arch.structure.Additional
-import com.tangem.tangemtest._arch.structure.Id
-import com.tangem.tangemtest._arch.structure.abstraction.*
-import com.tangem.tangemtest._arch.structure.impl.*
-import com.tangem.tangemtest.ucase.variants.personalize.*
-import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizationConfig
+import com.tangem.devkit._arch.structure.Additional
+import com.tangem.devkit._arch.structure.Id
+import com.tangem.devkit._arch.structure.abstraction.*
+import com.tangem.devkit._arch.structure.impl.*
+import com.tangem.devkit.ucase.variants.personalize.*
+import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
/**
@@ -50,65 +50,63 @@ class ItemsToPersonalizationConfig : ItemsToModel {
private fun createModel(): PersonalizationConfig {
val export = PersonalizationConfig()
- export.series = getTyped(CardNumber.Series)
- export.startNumber = getTyped(CardNumber.Number)
- export.batchId = getTyped(CardNumber.BatchId)
- export.curveID = getTyped(Common.Curve)
- export.blockchain = getTyped(Common.Blockchain)
- export.blockchainCustom = getTyped(Common.BlockchainCustom)
- export.MaxSignatures = getTyped(Common.MaxSignatures)
- export.createWallet = getTyped(Common.CreateWallet)
- export.SigningMethod0 = getTyped(SigningMethod.SignTx)
- export.SigningMethod1 = getTyped(SigningMethod.SignTxRaw)
- export.SigningMethod2 = getTyped(SigningMethod.SignValidatedTx)
- export.SigningMethod3 = getTyped(SigningMethod.SignValidatedTxRaw)
- export.SigningMethod4 = getTyped(SigningMethod.SignValidatedTxIssuer)
- export.SigningMethod5 = getTyped(SigningMethod.SignValidatedTxRawIssuer)
- export.SigningMethod6 = getTyped(SigningMethod.SignExternal)
- export.pinLessFloorLimit = getTyped(SignHashExProp.PinLessFloorLimit)
- export.hexCrExKey = getTyped(SignHashExProp.CryptoExKey)
- export.requireTerminalCertSignature = getTyped(SignHashExProp.RequireTerminalCertSig)
- export.requireTerminalTxSignature = getTyped(SignHashExProp.RequireTerminalTxSig)
- export.checkPIN3onCard = getTyped(SignHashExProp.CheckPin3)
- export.writeOnPersonalization = getTyped(Denomination.WriteOnPersonalize)
- export.denomination = getTyped(Denomination.Denomination)
- export.itsToken = getTyped(Token.ItsToken)
- export.symbol = getTyped(Token.Symbol)
- export.contractAddress = getTyped(Token.ContractAddress)
- export.decimal = getTyped(Token.Decimal)
- export.cardData = export.cardData.apply { this.product_note = getTyped(ProductMask.Note) }
- export.cardData = export.cardData.apply { this.product_tag = getTyped(ProductMask.Tag) }
- export.cardData = export.cardData.apply { this.product_id_card = getTyped(ProductMask.IdCard) }
- export.cardData = export.cardData.apply { this.product_id_issuer = getTyped(ProductMask.IdIssuerCard) }
- export.isReusable = getTyped(SettingsMask.IsReusable)
- export.useActivation = getTyped(SettingsMask.NeedActivation)
- export.forbidPurgeWallet = getTyped(SettingsMask.ForbidPurge)
- export.allowSelectBlockchain = getTyped(SettingsMask.AllowSelectBlockchain)
- export.useBlock = getTyped(SettingsMask.UseBlock)
- export.oneApdu = getTyped(SettingsMask.OneApdu)
- export.useCVC = getTyped(SettingsMask.UseCvc)
- export.allowSwapPIN = getTyped(SettingsMask.AllowSwapPin)
- export.allowSwapPIN2 = getTyped(SettingsMask.AllowSwapPin2)
- export.forbidDefaultPIN = getTyped(SettingsMask.ForbidDefaultPin)
- export.smartSecurityDelay = getTyped(SettingsMask.SmartSecurityDelay)
- export.protectIssuerDataAgainstReplay = getTyped(SettingsMask.ProtectIssuerDataAgainstReplay)
- export.skipSecurityDelayIfValidatedByIssuer = getTyped(SettingsMask.SkipSecurityDelayIfValidated)
- export.skipCheckPIN2andCVCIfValidatedByIssuer = getTyped(SettingsMask.SkipPin2CvcIfValidated)
- export.skipSecurityDelayIfValidatedByLinkedTerminal = getTyped(SettingsMask.SkipSecurityDelayOnLinkedTerminal)
- export.restrictOverwriteIssuerDataEx = getTyped(SettingsMask.RestrictOverwriteExtraIssuerData)
- export.protocolAllowUnencrypted = getTyped(SettingsMaskProtocolEnc.AllowUnencrypted)
- export.protocolAllowStaticEncryption = getTyped(SettingsMaskProtocolEnc.AllowStaticEncryption)
- export.useNDEF = getTyped(SettingsMaskNdef.UseNdef)
- export.useDynamicNDEF = getTyped(SettingsMaskNdef.DynamicNdef)
- export.disablePrecomputedNDEF = getTyped(SettingsMaskNdef.DisablePrecomputedNdef)
- export.aar = getTyped(SettingsMaskNdef.Aar)
- export.aarCustom = getTyped(SettingsMaskNdef.AarCustom)
- export.uri = getTyped(SettingsMaskNdef.Uri)
- export.PIN = getTyped(Pins.Pin)
- export.PIN2 = getTyped(Pins.Pin2)
- export.PIN3 = getTyped(Pins.Pin3)
- export.CVC = getTyped(Pins.Cvc)
- export.pauseBeforePIN2 = getTyped(Pins.PauseBeforePin2)
+ export.series = getTyped(CardNumberId.Series)
+ export.startNumber = getTyped(CardNumberId.Number)
+ export.cardData.batch = getTyped(CardNumberId.BatchId)
+ export.curveID = getTyped(CommonId.Curve)
+ export.cardData.blockchain = getTyped(CommonId.Blockchain)
+ export.blockchainCustom = getTyped(CommonId.BlockchainCustom)
+ export.MaxSignatures = getTyped(CommonId.MaxSignatures)
+ export.createWallet = getTyped(CommonId.CreateWallet)
+ export.SigningMethod0 = getTyped(SigningMethodId.SignTx)
+ export.SigningMethod1 = getTyped(SigningMethodId.SignTxRaw)
+ export.SigningMethod2 = getTyped(SigningMethodId.SignValidatedTx)
+ export.SigningMethod3 = getTyped(SigningMethodId.SignValidatedTxRaw)
+ export.SigningMethod4 = getTyped(SigningMethodId.SignValidatedTxIssuer)
+ export.SigningMethod5 = getTyped(SigningMethodId.SignValidatedTxRawIssuer)
+ export.SigningMethod6 = getTyped(SigningMethodId.SignExternal)
+ export.pinLessFloorLimit = getTyped(SignHashExPropId.PinLessFloorLimit)
+ export.hexCrExKey = getTyped(SignHashExPropId.CryptoExKey)
+ export.requireTerminalCertSignature = getTyped(SignHashExPropId.RequireTerminalCertSig)
+ export.requireTerminalTxSignature = getTyped(SignHashExPropId.RequireTerminalTxSig)
+ export.checkPIN3onCard = getTyped(SignHashExPropId.CheckPin3)
+ export.itsToken = getTyped(TokenId.ItsToken)
+ export.cardData.token_symbol = getTyped(TokenId.Symbol)
+ export.cardData.token_contract_address = getTyped(TokenId.ContractAddress)
+ export.cardData.token_decimal = getTyped(TokenId.Decimal)
+ export.cardData = export.cardData.apply { this.product_note = getTyped(ProductMaskId.Note) }
+ export.cardData = export.cardData.apply { this.product_tag = getTyped(ProductMaskId.Tag) }
+ export.cardData = export.cardData.apply { this.product_id_card = getTyped(ProductMaskId.IdCard) }
+ export.cardData = export.cardData.apply { this.product_id_issuer = getTyped(ProductMaskId.IdIssuerCard) }
+ export.isReusable = getTyped(SettingsMaskId.IsReusable)
+ export.useActivation = getTyped(SettingsMaskId.NeedActivation)
+ export.forbidPurgeWallet = getTyped(SettingsMaskId.ForbidPurge)
+ export.allowSelectBlockchain = getTyped(SettingsMaskId.AllowSelectBlockchain)
+ export.useBlock = getTyped(SettingsMaskId.UseBlock)
+ export.useOneCommandAtTime = getTyped(SettingsMaskId.OneApdu)
+ export.useCVC = getTyped(SettingsMaskId.UseCvc)
+ export.allowSwapPIN = getTyped(SettingsMaskId.AllowSwapPin)
+ export.allowSwapPIN2 = getTyped(SettingsMaskId.AllowSwapPin2)
+ export.forbidDefaultPIN = getTyped(SettingsMaskId.ForbidDefaultPin)
+ export.smartSecurityDelay = getTyped(SettingsMaskId.SmartSecurityDelay)
+ export.protectIssuerDataAgainstReplay = getTyped(SettingsMaskId.ProtectIssuerDataAgainstReplay)
+ export.skipSecurityDelayIfValidatedByIssuer = getTyped(SettingsMaskId.SkipSecurityDelayIfValidated)
+ export.skipCheckPIN2andCVCIfValidatedByIssuer = getTyped(SettingsMaskId.SkipPin2CvcIfValidated)
+ export.skipSecurityDelayIfValidatedByLinkedTerminal = getTyped(SettingsMaskId.SkipSecurityDelayOnLinkedTerminal)
+ export.restrictOverwriteIssuerDataEx = getTyped(SettingsMaskId.RestrictOverwriteExtraIssuerData)
+ export.protocolAllowUnencrypted = getTyped(SettingsMaskProtocolEncId.AllowUnencrypted)
+ export.protocolAllowStaticEncryption = getTyped(SettingsMaskProtocolEncId.AllowStaticEncryption)
+ export.useNDEF = getTyped(SettingsMaskNdefId.UseNdef)
+ export.useDynamicNDEF = getTyped(SettingsMaskNdefId.DynamicNdef)
+ export.disablePrecomputedNDEF = getTyped(SettingsMaskNdefId.DisablePrecomputedNdef)
+ export.aar = getTyped(SettingsMaskNdefId.Aar)
+ export.aarCustom = getTyped(SettingsMaskNdefId.AarCustom)
+ export.uri = getTyped(SettingsMaskNdefId.Uri)
+ export.PIN = getTyped(PinsId.Pin)
+ export.PIN2 = getTyped(PinsId.Pin2)
+ export.PIN3 = getTyped(PinsId.Pin3)
+ export.CVC = getTyped(PinsId.Cvc)
+ export.pauseBeforePIN2 = getTyped(PinsId.PauseBeforePin2)
return export
}
@@ -139,7 +137,6 @@ class PersonalizationConfigToItems : ModelToItems {
blocList.add(common())
blocList.add(signingMethod())
blocList.add(signHashExProperties())
- blocList.add(denomination())
blocList.add(token())
blocList.add(productMask())
blocList.add(settingsMask())
@@ -157,9 +154,9 @@ class PersonalizationConfigToItems : ModelToItems {
private fun cardNumber(): ItemGroup {
val block = createGroup(BlockId.CardNumber)
mutableListOf(
- CardNumber.Series,
- CardNumber.Number,
- CardNumber.BatchId
+ CardNumberId.Series,
+ CardNumberId.Number,
+ CardNumberId.BatchId
).forEach { createItem(block, it as Id) }
return block
}
@@ -167,12 +164,12 @@ class PersonalizationConfigToItems : ModelToItems {
private fun common(): ItemGroup {
val block = createGroup(BlockId.Common)
mutableListOf(
- Common.Blockchain,
- Common.BlockchainCustom,
- Common.Curve,
- Common.MaxSignatures,
- Common.CreateWallet,
- Pins.PauseBeforePin2
+ CommonId.Blockchain,
+ CommonId.BlockchainCustom,
+ CommonId.Curve,
+ CommonId.MaxSignatures,
+ CommonId.CreateWallet,
+ PinsId.PauseBeforePin2
).forEach { createItem(block, it as Id) }
return block
}
@@ -180,13 +177,13 @@ class PersonalizationConfigToItems : ModelToItems {
private fun signingMethod(): ItemGroup {
val block = createGroup(BlockId.SigningMethod)
mutableListOf(
- SigningMethod.SignTx,
- SigningMethod.SignTxRaw,
- SigningMethod.SignValidatedTx,
- SigningMethod.SignValidatedTxRaw,
- SigningMethod.SignValidatedTxIssuer,
- SigningMethod.SignValidatedTxRawIssuer,
- SigningMethod.SignExternal
+ SigningMethodId.SignTx,
+ SigningMethodId.SignTxRaw,
+ SigningMethodId.SignValidatedTx,
+ SigningMethodId.SignValidatedTxRaw,
+ SigningMethodId.SignValidatedTxIssuer,
+ SigningMethodId.SignValidatedTxRawIssuer,
+ SigningMethodId.SignExternal
).forEach { createItem(block, it) }
return block
}
@@ -194,20 +191,11 @@ class PersonalizationConfigToItems : ModelToItems {
private fun signHashExProperties(): ItemGroup {
val block = createGroup(BlockId.SignHashExProp)
mutableListOf(
- SignHashExProp.PinLessFloorLimit,
- SignHashExProp.CryptoExKey,
- SignHashExProp.RequireTerminalCertSig,
- SignHashExProp.RequireTerminalTxSig,
- SignHashExProp.CheckPin3
- ).forEach { createItem(block, it) }
- return block
- }
-
- private fun denomination(): ItemGroup {
- val block = createGroup(BlockId.Denomination)
- mutableListOf(
- Denomination.WriteOnPersonalize,
- Denomination.Denomination
+ SignHashExPropId.PinLessFloorLimit,
+ SignHashExPropId.CryptoExKey,
+ SignHashExPropId.RequireTerminalCertSig,
+ SignHashExPropId.RequireTerminalTxSig,
+ SignHashExPropId.CheckPin3
).forEach { createItem(block, it) }
return block
}
@@ -215,10 +203,10 @@ class PersonalizationConfigToItems : ModelToItems {
private fun token(): ItemGroup {
val block = createGroup(BlockId.Token)
mutableListOf(
- Token.ItsToken,
- Token.Symbol,
- Token.ContractAddress,
- Token.Decimal
+ TokenId.ItsToken,
+ TokenId.Symbol,
+ TokenId.ContractAddress,
+ TokenId.Decimal
).forEach { createItem(block, it) }
return block
}
@@ -226,10 +214,10 @@ class PersonalizationConfigToItems : ModelToItems {
private fun productMask(): ItemGroup {
val block = createGroup(BlockId.ProdMask)
mutableListOf(
- ProductMask.Note,
- ProductMask.Tag,
- ProductMask.IdCard,
- ProductMask.IdIssuerCard
+ ProductMaskId.Note,
+ ProductMaskId.Tag,
+ ProductMaskId.IdCard,
+ ProductMaskId.IdIssuerCard
).forEach { createItem(block, it) }
return block
}
@@ -237,22 +225,22 @@ class PersonalizationConfigToItems : ModelToItems {
private fun settingsMask(): ItemGroup {
val block = createGroup(BlockId.SettingsMask)
mutableListOf(
- SettingsMask.IsReusable,
- SettingsMask.NeedActivation,
- SettingsMask.ForbidPurge,
- SettingsMask.AllowSelectBlockchain,
- SettingsMask.UseBlock,
- SettingsMask.OneApdu,
- SettingsMask.UseCvc,
- SettingsMask.AllowSwapPin,
- SettingsMask.AllowSwapPin2,
- SettingsMask.ForbidDefaultPin,
- SettingsMask.SmartSecurityDelay,
- SettingsMask.ProtectIssuerDataAgainstReplay,
- SettingsMask.SkipSecurityDelayIfValidated,
- SettingsMask.SkipPin2CvcIfValidated,
- SettingsMask.SkipSecurityDelayOnLinkedTerminal,
- SettingsMask.RestrictOverwriteExtraIssuerData
+ SettingsMaskId.IsReusable,
+ SettingsMaskId.NeedActivation,
+ SettingsMaskId.ForbidPurge,
+ SettingsMaskId.AllowSelectBlockchain,
+ SettingsMaskId.UseBlock,
+ SettingsMaskId.OneApdu,
+ SettingsMaskId.UseCvc,
+ SettingsMaskId.AllowSwapPin,
+ SettingsMaskId.AllowSwapPin2,
+ SettingsMaskId.ForbidDefaultPin,
+ SettingsMaskId.SmartSecurityDelay,
+ SettingsMaskId.ProtectIssuerDataAgainstReplay,
+ SettingsMaskId.SkipSecurityDelayIfValidated,
+ SettingsMaskId.SkipPin2CvcIfValidated,
+ SettingsMaskId.SkipSecurityDelayOnLinkedTerminal,
+ SettingsMaskId.RestrictOverwriteExtraIssuerData
).forEach { createItem(block, it) }
return block
}
@@ -260,8 +248,8 @@ class PersonalizationConfigToItems : ModelToItems {
private fun settingsMaskProtocolEnc(): ItemGroup {
val block = createGroup(BlockId.SettingsMaskProtocolEnc)
mutableListOf(
- SettingsMaskProtocolEnc.AllowUnencrypted,
- SettingsMaskProtocolEnc.AllowStaticEncryption
+ SettingsMaskProtocolEncId.AllowUnencrypted,
+ SettingsMaskProtocolEncId.AllowStaticEncryption
).forEach { createItem(block, it) }
return block
}
@@ -269,12 +257,12 @@ class PersonalizationConfigToItems : ModelToItems {
private fun settingsMaskNdef(): ItemGroup {
val block = createGroup(BlockId.SettingsMaskNdef)
mutableListOf(
- SettingsMaskNdef.UseNdef,
- SettingsMaskNdef.DynamicNdef,
- SettingsMaskNdef.DisablePrecomputedNdef,
- SettingsMaskNdef.Aar,
- SettingsMaskNdef.AarCustom,
- SettingsMaskNdef.Uri
+ SettingsMaskNdefId.UseNdef,
+ SettingsMaskNdefId.DynamicNdef,
+ SettingsMaskNdefId.DisablePrecomputedNdef,
+ SettingsMaskNdefId.Aar,
+ SettingsMaskNdefId.AarCustom,
+ SettingsMaskNdefId.Uri
).forEach { createItem(block, it) }
return block
}
@@ -282,10 +270,10 @@ class PersonalizationConfigToItems : ModelToItems