Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ethers.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "";
Expand All @@ -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 = "";
Expand Down
2 changes: 1 addition & 1 deletion ethers/src/Account.m
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ - (void)cancel {

@interface Signature (private)

+ (instancetype)signatureWithData: (NSData*)data v: (char)v;
+ (instancetype)signatureWithData: (NSData*)data v: (int)v;

@end

Expand Down
2 changes: 1 addition & 1 deletion ethers/src/Signature.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
6 changes: 3 additions & 3 deletions ethers/src/Signature.m
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -40,15 +40,15 @@ - (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)]
s:[data subdataWithRange:NSMakeRange(32, 32)]
v:v];
}

+ (instancetype)signatureWithData: (NSData*)data v:(char)v {
+ (instancetype)signatureWithData: (NSData*)data v:(int)v {
return [[Signature alloc] initWithData:data v:v];
}

Expand Down
14 changes: 7 additions & 7 deletions ethers/src/Transaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
23 changes: 12 additions & 11 deletions ethers/src/Transaction.m
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -67,7 +68,7 @@

@interface Signature (private)

+ (instancetype)signatureWithData: (NSData*)data v: (char)v;
+ (instancetype)signatureWithData: (NSData*)data v: (int)v;

@end

Expand Down Expand Up @@ -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)];
}
Expand Down Expand Up @@ -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];
}
Expand All @@ -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
Expand All @@ -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];
}
Expand Down Expand Up @@ -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];
}
Expand All @@ -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];
}
Expand Down