From 46bbc8a82976069b7dcf0133933274251003ddd3 Mon Sep 17 00:00:00 2001 From: ZhaoYiqi Date: Thu, 13 Sep 2018 19:01:48 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9chainid=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ethers/src/Transaction.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ethers/src/Transaction.h b/ethers/src/Transaction.h index 9b0aa27..aa9ae45 100644 --- a/ethers/src/Transaction.h +++ b/ethers/src/Transaction.h @@ -45,13 +45,13 @@ * See: https://github.com/ethereum/EIPs/issues/155 */ -typedef NS_OPTIONS(unsigned char, ChainId) { - ChianIdAny = 0x00, - ChainIdHomestead = 0x01, - ChainIdMorden = 0x02, - ChainIdRopsten = 0x03, - ChainIdRinkeby = 0x04, - ChainIdKovan = 0x2a, +typedef NS_OPTIONS(int, ChainId) { + ChianIdAny = 0, + ChainIdHomestead = 1, + ChainIdMorden = 2, + ChainIdRopsten = 3, + ChainIdRinkeby = 4, + ChainIdKovan = 42, }; extern NSString * _Nullable chainName(ChainId chainId); From acbcc0731cb90eccc38a39d695761a79ba4d0d90 Mon Sep 17 00:00:00 2001 From: ZhaoYiqi Date: Fri, 14 Sep 2018 16:22:42 +0800 Subject: [PATCH 2/5] chainid support custom number --- ethers/src/Account.m | 2 +- ethers/src/Signature.h | 2 +- ethers/src/Signature.m | 6 +++--- ethers/src/Transaction.m | 14 ++++++++------ 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ethers/src/Account.m b/ethers/src/Account.m index 719f1ae..3202ce7 100644 --- a/ethers/src/Account.m +++ b/ethers/src/Account.m @@ -113,7 +113,7 @@ - (void)cancel { @interface Signature (private) -+ (instancetype)signatureWithData: (NSData*)data v: (char)v; ++ (instancetype)signatureWithData: (NSData*)data v: (int)v; @end diff --git a/ethers/src/Signature.h b/ethers/src/Signature.h index 8eef620..5087d6a 100644 --- a/ethers/src/Signature.h +++ b/ethers/src/Signature.h @@ -31,6 +31,6 @@ @property (nonatomic, readonly) NSData* r; @property (nonatomic, readonly) NSData* s; -@property (nonatomic, readonly) char v; +@property (nonatomic, readonly) int v; @end diff --git a/ethers/src/Signature.m b/ethers/src/Signature.m index ea8cd62..fe78903 100644 --- a/ethers/src/Signature.m +++ b/ethers/src/Signature.m @@ -29,7 +29,7 @@ @implementation Signature -- (instancetype)initWithR: (NSData*)r s: (NSData*)s v: (char)v { +- (instancetype)initWithR: (NSData*)r s: (NSData*)s v: (int)v { if (r.length != 32 || s.length != 32) { return nil; } self = [super init]; if (self) { @@ -40,7 +40,7 @@ - (instancetype)initWithR: (NSData*)r s: (NSData*)s v: (char)v { return self; } -- (instancetype)initWithData: (NSData*)data v: (char)v { +- (instancetype)initWithData: (NSData*)data v: (int)v { if (data.length != 64) { return nil; } return [self initWithR:[data subdataWithRange:NSMakeRange(0, 32)] @@ -48,7 +48,7 @@ - (instancetype)initWithData: (NSData*)data v: (char)v { v:v]; } -+ (instancetype)signatureWithData: (NSData*)data v:(char)v { ++ (instancetype)signatureWithData: (NSData*)data v:(int)v { return [[Signature alloc] initWithData:data v:v]; } diff --git a/ethers/src/Transaction.m b/ethers/src/Transaction.m index 9c2dac5..0bd8bd8 100644 --- a/ethers/src/Transaction.m +++ b/ethers/src/Transaction.m @@ -42,8 +42,10 @@ return [data subdataWithRange:NSMakeRange(offset, data.length - offset)]; } -static NSData *dataWithByte(unsigned char value) { - return [NSMutableData dataWithBytes:&value length:1]; +static NSData *dataWithByte(int value) { + int tmpValue = CFSwapInt32(value); + BOOL isLocalValue = chainName(value); + return [NSMutableData dataWithBytes:isLocalValue ? &value : &tmpValue length:isLocalValue ? 1 : sizeof(tmpValue)]; } NSString *chainName(ChainId chainId) { @@ -67,7 +69,7 @@ @interface Signature (private) -+ (instancetype)signatureWithData: (NSData*)data v: (char)v; ++ (instancetype)signatureWithData: (NSData*)data v: (int)v; @end @@ -173,7 +175,7 @@ + (instancetype)transactionWithData: (NSData*)transactionData { NSData *vObject = [raw objectAtIndex:6]; if (vObject.length > 1) { return nil; } - unsigned char v = 0; + int v = 0; if (vObject.length == 1) { [vObject getBytes:&v range:NSMakeRange(0, 1)]; } @@ -249,7 +251,7 @@ - (void)sign:(Account *)account { } } -- (void)verifySignatureData: (NSData*)signatureData v: (unsigned char)v { +- (void)verifySignatureData: (NSData*)signatureData v: (int)v { _signature = [Signature signatureWithData:signatureData v:v]; // Use an int so we can detect underflow @@ -335,7 +337,7 @@ - (NSData*)serialize { NSMutableArray *raw = [self _packBasic]; if (_signature) { - uint8_t v = 27 + self.signature.v; + int v = 27 + self.signature.v; if (_chainId) { v += _chainId * 2 + 8; } [raw addObject:dataWithByte(v)]; [raw addObject:stripDataZeros(self.signature.r)]; From 1d70935cbf12ca0d14abfd9484370f2786db1973 Mon Sep 17 00:00:00 2001 From: ZhaoYiqi Date: Fri, 14 Sep 2018 19:39:59 +0800 Subject: [PATCH 3/5] support eth chainid and no chainid --- ethers/src/Transaction.m | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/ethers/src/Transaction.m b/ethers/src/Transaction.m index 0bd8bd8..f7152f6 100644 --- a/ethers/src/Transaction.m +++ b/ethers/src/Transaction.m @@ -42,9 +42,8 @@ return [data subdataWithRange:NSMakeRange(offset, data.length - offset)]; } -static NSData *dataWithByte(int value) { +static NSData *dataWithByte(int value,bool isLocalValue) { int tmpValue = CFSwapInt32(value); - BOOL isLocalValue = chainName(value); return [NSMutableData dataWithBytes:isLocalValue ? &value : &tmpValue length:isLocalValue ? 1 : sizeof(tmpValue)]; } @@ -235,7 +234,7 @@ - (void)sign:(Account *)account { if (account) { NSMutableArray *raw = [self _packBasic]; if (_chainId) { - [raw addObject:dataWithByte(_chainId)]; + [raw addObject:dataWithByte(_chainId,chainName(_chainId))]; [raw addObject:NullData]; [raw addObject:NullData]; } @@ -262,7 +261,7 @@ - (void)verifySignatureData: (NSData*)signatureData v: (int)v { NSMutableArray *raw = [self _packBasic]; if (_chainId) { - [raw addObject:dataWithByte(_chainId)]; + [raw addObject:dataWithByte(_chainId,chainName(_chainId))]; [raw addObject:NullData]; [raw addObject:NullData]; } @@ -339,12 +338,12 @@ - (NSData*)serialize { if (_signature) { int v = 27 + self.signature.v; if (_chainId) { v += _chainId * 2 + 8; } - [raw addObject:dataWithByte(v)]; + [raw addObject:dataWithByte(v,chainName(_chainId))]; [raw addObject:stripDataZeros(self.signature.r)]; [raw addObject:stripDataZeros(self.signature.s)]; } else { - [raw addObject:dataWithByte(_chainId ? _chainId: 28)]; + [raw addObject:dataWithByte(_chainId ? _chainId: 28,_chainId?chainName(_chainId):true)]; [raw addObject:NullData]; [raw addObject:NullData]; } @@ -356,7 +355,7 @@ - (NSData*)unsignedSerialize { NSMutableArray *raw = [self _packBasic]; if (_chainId) { - [raw addObject:dataWithByte(_chainId)]; + [raw addObject:dataWithByte(_chainId,chainName(_chainId))]; [raw addObject:NullData]; [raw addObject:NullData]; } From 2ca3adac4e991b492ff4dd25da9218a4ece5f180 Mon Sep 17 00:00:00 2001 From: ZhaoYiqi Date: Mon, 17 Sep 2018 12:08:35 +0800 Subject: [PATCH 4/5] support eth chainid and no chainid --- ethers/src/Transaction.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethers/src/Transaction.m b/ethers/src/Transaction.m index f7152f6..32be818 100644 --- a/ethers/src/Transaction.m +++ b/ethers/src/Transaction.m @@ -343,7 +343,7 @@ - (NSData*)serialize { [raw addObject:stripDataZeros(self.signature.s)]; } else { - [raw addObject:dataWithByte(_chainId ? _chainId: 28,_chainId?chainName(_chainId):true)]; + [raw addObject:dataWithByte(_chainId ? _chainId: 28,_chainId?(chainName(_chainId)!=nil):true)]; [raw addObject:NullData]; [raw addObject:NullData]; } From 0f0efbffd6938e02fcebb352f20089784a4fc06d Mon Sep 17 00:00:00 2001 From: ZhaoYiqi Date: Wed, 17 Oct 2018 17:28:59 +0800 Subject: [PATCH 5/5] change deployment target 8.0 --- ethers.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ethers.xcodeproj/project.pbxproj b/ethers.xcodeproj/project.pbxproj index 5d80d7c..5abafec 100644 --- a/ethers.xcodeproj/project.pbxproj +++ b/ethers.xcodeproj/project.pbxproj @@ -823,7 +823,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = ethers/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; @@ -845,7 +845,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = ethers/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = "";