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 = ""; 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.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); diff --git a/ethers/src/Transaction.m b/ethers/src/Transaction.m index 9c2dac5..32be818 100644 --- a/ethers/src/Transaction.m +++ b/ethers/src/Transaction.m @@ -42,8 +42,9 @@ 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,bool isLocalValue) { + int tmpValue = CFSwapInt32(value); + return [NSMutableData dataWithBytes:isLocalValue ? &value : &tmpValue length:isLocalValue ? 1 : sizeof(tmpValue)]; } NSString *chainName(ChainId chainId) { @@ -67,7 +68,7 @@ @interface Signature (private) -+ (instancetype)signatureWithData: (NSData*)data v: (char)v; ++ (instancetype)signatureWithData: (NSData*)data v: (int)v; @end @@ -173,7 +174,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)]; } @@ -233,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]; } @@ -249,7 +250,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 @@ -260,7 +261,7 @@ - (void)verifySignatureData: (NSData*)signatureData v: (unsigned char)v { NSMutableArray *raw = [self _packBasic]; if (_chainId) { - [raw addObject:dataWithByte(_chainId)]; + [raw addObject:dataWithByte(_chainId,chainName(_chainId))]; [raw addObject:NullData]; [raw addObject:NullData]; } @@ -335,14 +336,14 @@ - (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: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)!=nil):true)]; [raw addObject:NullData]; [raw addObject:NullData]; } @@ -354,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]; }