Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
ed1cb9ed
Commit
ed1cb9ed
authored
Jan 14, 2015
by
Marek Kotewicz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
simplifid abi.js methods
parent
17f2f12c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
72 additions
and
59 deletions
+72
-59
abi.js
lib/abi.js
+72
-59
No files found.
lib/abi.js
View file @
ed1cb9ed
...
...
@@ -54,56 +54,52 @@ var padLeft = function (string, chars) {
return
new
Array
(
chars
-
string
.
length
+
1
).
join
(
"0"
)
+
string
;
};
/// Setups input formatters for solidity types
/// @returns an array of input formatters
var
setupInputTypes
=
function
()
{
var
prefixedType
=
function
(
prefix
)
{
return
function
(
type
,
value
)
{
var
expected
=
prefix
;
if
(
type
.
indexOf
(
expected
)
!==
0
)
{
return
false
;
}
return
type
.
indexOf
(
prefix
)
===
0
;
};
};
var
padding
=
32
;
// override as per the new ABI.
var
namedType
=
function
(
name
,
formatter
)
{
return
function
(
type
,
value
)
{
return
type
===
name
;
};
};
if
(
prefix
===
"string"
)
return
web3
.
fromAscii
(
value
,
padding
).
substr
(
2
)
;
if
(
typeof
value
===
"number"
)
var
formatInt
=
function
(
value
)
{
var
padding
=
32
*
2
;
if
(
typeof
value
===
'number'
)
value
=
value
.
toString
(
16
);
else
if
(
typeof
value
===
"string"
)
value
=
web3
.
toHex
(
value
);
else
if
(
value
.
indexOf
(
'0x'
)
===
0
)
value
=
value
.
substr
(
2
);
else
if
(
typeof
value
===
'string'
)
value
=
value
.
toHex
(
value
);
else
value
=
(
+
value
).
toString
(
16
);
return
padLeft
(
value
,
padding
*
2
);
};
return
padLeft
(
value
,
padding
);
};
var
namedType
=
function
(
name
,
formatter
)
{
return
function
(
type
,
value
)
{
if
(
type
!==
name
)
{
return
false
;
}
var
padding
=
32
;
//override as per the new ABI.
return
padLeft
(
formatter
?
formatter
(
value
)
:
value
,
padding
*
2
);
};
var
formatString
=
function
(
value
)
{
return
web3
.
fromAscii
(
value
,
32
).
substr
(
2
);
};
var
formatBool
=
function
(
value
)
{
return
value
?
'0x1'
:
'0x0'
;
return
'000000000000000000000000000000000000000000000000000000000000000'
+
(
value
?
'1'
:
'0'
)
;
};
return
[
prefixedType
(
'uint'
)
,
prefixedType
(
'int'
)
,
prefixedType
(
'hash'
)
,
prefixedType
(
'string'
),
prefixedType
(
'real'
)
,
prefixedType
(
'ureal'
)
,
namedType
(
'address'
)
,
namedType
(
'bool'
,
formatBool
),
{
type
:
prefixedType
(
'uint'
),
format
:
formatInt
}
,
{
type
:
prefixedType
(
'int'
),
format
:
formatInt
}
,
{
type
:
prefixedType
(
'hash'
),
format
:
formatInt
}
,
{
type
:
prefixedType
(
'string'
),
format
:
formatString
},
{
type
:
prefixedType
(
'real'
),
format
:
formatInt
}
,
{
type
:
prefixedType
(
'ureal'
),
format
:
formatInt
}
,
{
type
:
namedType
(
'address'
)
}
,
{
type
:
namedType
(
'bool'
),
format
:
formatBool
}
];
};
...
...
@@ -118,65 +114,73 @@ var toAbiInput = function (json, methodName, params) {
}
var
method
=
json
[
index
];
var
padding
=
32
*
2
;
for
(
var
i
=
0
;
i
<
method
.
inputs
.
length
;
i
++
)
{
var
found
=
false
;
for
(
var
j
=
0
;
j
<
inputTypes
.
length
&&
!
found
;
j
++
)
{
found
=
inputTypes
[
j
]
(
method
.
inputs
[
i
].
type
,
params
[
i
]);
var
typeMatch
=
false
;
for
(
var
j
=
0
;
j
<
inputTypes
.
length
&&
!
typeMatch
;
j
++
)
{
typeMatch
=
inputTypes
[
j
].
type
(
method
.
inputs
[
i
].
type
,
params
[
i
]);
}
if
(
!
found
)
{
console
.
error
(
'
unsupported json
type: '
+
method
.
inputs
[
i
].
type
);
if
(
!
typeMatch
)
{
console
.
error
(
'
input parser does not support
type: '
+
method
.
inputs
[
i
].
type
);
}
bytes
+=
found
;
var
formatter
=
inputTypes
[
j
-
1
].
format
;
bytes
+=
(
formatter
?
formatter
(
params
[
i
])
:
params
[
i
]);
}
return
bytes
;
};
/// Setups output formaters for solidity types
/// @returns an array of output formatters
var
setupOutputTypes
=
function
()
{
/// @param expected type prefix (string)
/// @returns function which checks if type has matching prefix. if yes, returns true, otherwise false
var
prefixedType
=
function
(
prefix
)
{
return
function
(
type
)
{
var
expected
=
prefix
;
if
(
type
.
indexOf
(
expected
)
!==
0
)
{
return
-
1
;
}
var
padding
=
32
;
// override as per the new ABI.
return
padding
*
2
;
return
type
.
indexOf
(
expected
)
===
0
;
};
};
/// @param expected type name (string)
/// @returns function which checks if type is matching expected one. if yes, returns true, otherwise false
var
namedType
=
function
(
name
)
{
return
function
(
type
)
{
var
padding
=
32
;
// override as per the new ABI.
return
name
===
type
?
padding
*
2
:
-
1
;
return
name
===
type
;
};
};
/// @returns input bytes formatted to int
var
formatInt
=
function
(
value
)
{
return
value
.
length
<=
8
?
+
parseInt
(
value
,
16
)
:
hexToDec
(
value
);
};
/// @returns input bytes formatted to hex
var
formatHash
=
function
(
value
)
{
return
"0x"
+
value
;
};
/// @returns input bytes formatted to bool
var
formatBool
=
function
(
value
)
{
return
value
===
'1'
?
true
:
false
;
};
/// @returns input bytes formatted to ascii string
var
formatString
=
function
(
value
)
{
return
web3
.
toAscii
(
value
);
};
return
[
{
padding
:
prefixedType
(
'uint'
),
format
:
formatInt
},
{
padding
:
prefixedType
(
'int'
),
format
:
formatInt
},
{
padding
:
prefixedType
(
'hash'
),
format
:
formatHash
},
{
padding
:
prefixedType
(
'string'
),
format
:
formatString
},
{
padding
:
prefixedType
(
'real'
),
format
:
formatInt
},
{
padding
:
prefixedType
(
'ureal'
),
format
:
formatInt
},
{
padding
:
namedType
(
'address'
)
},
{
padding
:
namedType
(
'bool'
),
format
:
formatBool
}
{
type
:
prefixedType
(
'uint'
),
format
:
formatInt
},
{
type
:
prefixedType
(
'int'
),
format
:
formatInt
},
{
type
:
prefixedType
(
'hash'
),
format
:
formatHash
},
{
type
:
prefixedType
(
'string'
),
format
:
formatString
},
{
type
:
prefixedType
(
'real'
),
format
:
formatInt
},
{
type
:
prefixedType
(
'ureal'
),
format
:
formatInt
},
{
type
:
namedType
(
'address'
)
},
{
type
:
namedType
(
'bool'
),
format
:
formatBool
}
];
};
...
...
@@ -193,14 +197,16 @@ var fromAbiOutput = function (json, methodName, output) {
var
result
=
[];
var
method
=
json
[
index
];
var
padding
=
32
*
2
;
for
(
var
i
=
0
;
i
<
method
.
outputs
.
length
;
i
++
)
{
var
padding
=
-
1
;
for
(
var
j
=
0
;
j
<
outputTypes
.
length
&&
padding
===
-
1
;
j
++
)
{
padding
=
outputTypes
[
j
].
padding
(
method
.
outputs
[
i
].
type
);
var
typeMatch
=
false
;
for
(
var
j
=
0
;
j
<
outputTypes
.
length
&&
!
typeMatch
;
j
++
)
{
typeMatch
=
outputTypes
[
j
].
type
(
method
.
outputs
[
i
].
type
);
}
if
(
padding
===
-
1
)
{
if
(
!
typeMatch
)
{
// not found output parsing
console
.
error
(
'output parser does not support type: '
+
method
.
outputs
[
i
].
type
);
continue
;
}
var
res
=
output
.
slice
(
0
,
padding
);
...
...
@@ -212,6 +218,8 @@ var fromAbiOutput = function (json, methodName, output) {
return
result
;
};
/// @param json abi for contract
/// @returns input parser object for given json abi
var
inputParser
=
function
(
json
)
{
var
parser
=
{};
json
.
forEach
(
function
(
method
)
{
...
...
@@ -224,6 +232,8 @@ var inputParser = function (json) {
return
parser
;
};
/// @param json abi for contract
/// @returns output parser for given json abi
var
outputParser
=
function
(
json
)
{
var
parser
=
{};
json
.
forEach
(
function
(
method
)
{
...
...
@@ -235,6 +245,9 @@ var outputParser = function (json) {
return
parser
;
};
/// @param json abi for contract
/// @param method name for which we want to get method signature
/// @returns (promise) contract method signature for method with given name
var
methodSignature
=
function
(
json
,
name
)
{
var
method
=
json
[
findMethodIndex
(
json
,
name
)];
var
result
=
name
+
'('
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment