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
1d139f7a
Commit
1d139f7a
authored
Jan 06, 2015
by
Marek Kotewicz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
solidity string support
parent
b6232cfd
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
13 deletions
+31
-13
ethereum.js
dist/ethereum.js
+1
-1
ethereum.js.map
dist/ethereum.js.map
+1
-1
ethereum.min.js
dist/ethereum.min.js
+1
-1
abi.js
lib/abi.js
+28
-10
No files found.
dist/ethereum.js
View file @
1d139f7a
require
=
(
function
e
(
t
,
n
,
r
){
function
s
(
o
,
u
){
if
(
!
n
[
o
]){
if
(
!
t
[
o
]){
var
a
=
typeof
require
==
"function"
&&
require
;
if
(
!
u
&&
a
)
return
a
(
o
,
!
0
);
if
(
i
)
return
i
(
o
,
!
0
);
var
f
=
new
Error
(
"Cannot find module '"
+
o
+
"'"
);
throw
f
.
code
=
"MODULE_NOT_FOUND"
,
f
}
var
l
=
n
[
o
]
=
{
exports
:{}};
t
[
o
][
0
].
call
(
l
.
exports
,
function
(
e
){
var
n
=
t
[
o
][
1
][
e
];
return
s
(
n
?
n
:
e
)},
l
,
l
.
exports
,
e
,
t
,
n
,
r
)}
return
n
[
o
].
exports
}
var
i
=
typeof
require
==
"function"
&&
require
;
for
(
var
o
=
0
;
o
<
r
.
length
;
o
++
)
s
(
r
[
o
]);
return
s
})({
1
:[
function
(
require
,
module
,
exports
){
var
hexToDec
=
function
(
hex
){
return
parseInt
(
hex
,
16
).
toString
()},
decToHex
=
function
(
dec
){
return
parseInt
(
dec
).
toString
(
16
)},
findIndex
=
function
(
array
,
callback
){
for
(
var
end
=!
1
,
i
=
0
;
i
<
array
.
length
&&!
end
;
i
++
)
end
=
callback
(
array
[
i
]);
return
end
?
i
-
1
:
-
1
},
findMethodIndex
=
function
(
json
,
methodName
){
return
findIndex
(
json
,
function
(
method
){
return
method
.
name
===
methodName
})},
padLeft
=
function
(
string
,
chars
){
return
new
Array
(
chars
-
string
.
length
+
1
).
join
(
"0"
)
+
string
},
setupInputTypes
=
function
(){
var
prefixedType
=
function
(
prefix
){
return
function
(
type
,
value
){
var
padding
,
expected
=
prefix
;
return
0
!==
type
.
indexOf
(
expected
)?
!
1
:(
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
,
value
=
"number"
==
typeof
value
?
value
.
toString
(
16
):
0
===
value
.
indexOf
(
"0x"
)?
value
.
substr
(
2
):(
+
value
).
toString
(
16
),
padLeft
(
value
,
2
*
padding
))}},
namedType
=
function
(
name
,
padding
,
formatter
){
return
function
(
type
,
value
){
return
type
!==
name
?
!
1
:
padLeft
(
formatter
?
formatter
(
value
):
value
,
2
*
padding
)}},
formatBool
=
function
(
value
){
return
value
?
"0x1"
:
"0x0"
};
return
[
prefixedType
(
"uint"
),
prefixedType
(
"int"
),
prefixedType
(
"hash"
),
namedType
(
"address"
,
20
),
namedType
(
"bool"
,
1
,
formatBool
)]},
inputTypes
=
setupInputTypes
(),
toAbiInput
=
function
(
json
,
methodName
,
params
){
var
method
,
i
,
found
,
j
,
bytes
=
""
,
index
=
findMethodIndex
(
json
,
methodName
);
if
(
-
1
!==
index
){
for
(
bytes
=
"0x"
+
padLeft
(
index
.
toString
(
16
),
2
),
method
=
json
[
index
],
i
=
0
;
i
<
method
.
inputs
.
length
;
i
++
){
for
(
found
=!
1
,
j
=
0
;
j
<
inputTypes
.
length
&&!
found
;
j
++
)
found
=
inputTypes
[
j
](
method
.
inputs
[
i
].
type
,
params
[
i
]);
found
||
console
.
error
(
"unsupported json type: "
+
method
.
inputs
[
i
].
type
),
bytes
+=
found
}
return
bytes
}},
setupOutputTypes
=
function
(){
var
prefixedType
=
function
(
prefix
){
return
function
(
type
){
var
padding
,
expected
=
prefix
;
return
0
!==
type
.
indexOf
(
expected
)?
-
1
:(
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
,
2
*
padding
)}},
namedType
=
function
(
name
,
padding
){
return
function
(
type
){
return
name
===
type
?
2
*
padding
:
-
1
}},
formatInt
=
function
(
value
){
return
value
.
length
<=
8
?
+
parseInt
(
value
,
16
):
hexToDec
(
value
)},
formatHash
=
function
(
value
){
return
"0x"
+
value
},
formatBool
=
function
(
value
){
return
"1"
===
value
?
!
0
:
!
1
};
return
[{
padding
:
prefixedType
(
"uint"
),
format
:
formatInt
},{
padding
:
prefixedType
(
"int"
),
format
:
formatInt
},{
padding
:
prefixedType
(
"hash"
),
format
:
formatHash
},{
padding
:
namedType
(
"address"
,
20
)},{
padding
:
namedType
(
"bool"
,
1
),
format
:
formatBool
}]},
outputTypes
=
setupOutputTypes
(),
fromAbiOutput
=
function
(
json
,
methodName
,
output
){
var
result
,
method
,
i
,
padding
,
j
,
res
,
formatter
,
index
=
findMethodIndex
(
json
,
methodName
);
if
(
-
1
!==
index
){
for
(
output
=
output
.
slice
(
2
),
result
=
[],
method
=
json
[
index
],
i
=
0
;
i
<
method
.
outputs
.
length
;
i
++
){
for
(
padding
=-
1
,
j
=
0
;
j
<
outputTypes
.
length
&&-
1
===
padding
;
j
++
)
padding
=
outputTypes
[
j
].
padding
(
method
.
outputs
[
i
].
type
);
-
1
!==
padding
&&
(
res
=
output
.
slice
(
0
,
padding
),
formatter
=
outputTypes
[
j
-
1
].
format
,
result
.
push
(
formatter
?
formatter
(
res
):
"0x"
+
res
),
output
=
output
.
slice
(
padding
))}
return
result
}},
inputParser
=
function
(
json
){
var
parser
=
{};
return
json
.
forEach
(
function
(
method
){
parser
[
method
.
name
]
=
function
(){
var
params
=
Array
.
prototype
.
slice
.
call
(
arguments
);
return
toAbiInput
(
json
,
method
.
name
,
params
)}}),
parser
},
outputParser
=
function
(
json
){
var
parser
=
{};
return
json
.
forEach
(
function
(
method
){
parser
[
method
.
name
]
=
function
(
output
){
return
fromAbiOutput
(
json
,
method
.
name
,
output
)}}),
parser
};
module
.
exports
=
{
inputParser
:
inputParser
,
outputParser
:
outputParser
};
var
hexToDec
,
decToHex
,
findIndex
,
findMethodIndex
,
padLeft
,
setupInputTypes
,
inputTypes
,
toAbiInput
,
setupOutputTypes
,
outputTypes
,
fromAbiOutput
,
inputParser
,
outputParser
;
hexToDec
=
function
(
hex
){
return
parseInt
(
hex
,
16
).
toString
()},
decToHex
=
function
(
dec
){
return
parseInt
(
dec
).
toString
(
16
)},
findIndex
=
function
(
array
,
callback
){
for
(
var
end
=!
1
,
i
=
0
;
i
<
array
.
length
&&!
end
;
i
++
)
end
=
callback
(
array
[
i
]);
return
end
?
i
-
1
:
-
1
},
findMethodIndex
=
function
(
json
,
methodName
){
return
findIndex
(
json
,
function
(
method
){
return
method
.
name
===
methodName
})},
padLeft
=
function
(
string
,
chars
){
return
new
Array
(
chars
-
string
.
length
+
1
).
join
(
"0"
)
+
string
},
setupInputTypes
=
function
(){
var
prefixedType
=
function
(
prefix
,
bitsInNumber
){
return
function
(
type
,
value
){
var
padding
,
expected
=
prefix
;
return
0
!==
type
.
indexOf
(
expected
)?
!
1
:(
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
*
bitsInNumber
,
value
=
"number"
==
typeof
value
?
value
.
toString
(
16
):
"string"
==
typeof
value
?
web3
.
toHex
(
value
):
0
===
value
.
indexOf
(
"0x"
)?
value
.
substr
(
2
):(
+
value
).
toString
(
16
),
padLeft
(
value
,
2
*
padding
))}},
namedType
=
function
(
name
,
padding
,
formatter
){
return
function
(
type
,
value
){
return
type
!==
name
?
!
1
:
padLeft
(
formatter
?
formatter
(
value
):
value
,
2
*
padding
)}},
formatBool
=
function
(
value
){
return
value
?
"0x1"
:
"0x0"
};
return
[
prefixedType
(
"uint"
,
1
),
prefixedType
(
"int"
,
1
),
prefixedType
(
"hash"
,
1
),
prefixedType
(
"string"
,
8
),
namedType
(
"address"
,
20
),
namedType
(
"bool"
,
1
,
formatBool
)]},
inputTypes
=
setupInputTypes
(),
toAbiInput
=
function
(
json
,
methodName
,
params
){
var
method
,
i
,
found
,
j
,
bytes
=
""
,
index
=
findMethodIndex
(
json
,
methodName
);
if
(
-
1
!==
index
){
for
(
bytes
=
"0x"
+
padLeft
(
index
.
toString
(
16
),
2
),
method
=
json
[
index
],
i
=
0
;
i
<
method
.
inputs
.
length
;
i
++
){
for
(
found
=!
1
,
j
=
0
;
j
<
inputTypes
.
length
&&!
found
;
j
++
)
found
=
inputTypes
[
j
](
method
.
inputs
[
i
].
type
,
params
[
i
]);
found
||
console
.
error
(
"unsupported json type: "
+
method
.
inputs
[
i
].
type
),
bytes
+=
found
}
return
bytes
}},
setupOutputTypes
=
function
(){
var
prefixedType
=
function
(
prefix
,
bitsInNumber
){
return
function
(
type
){
var
padding
,
expected
=
prefix
;
return
0
!==
type
.
indexOf
(
expected
)?
-
1
:(
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
*
bitsInNumber
,
2
*
padding
)}},
namedType
=
function
(
name
,
padding
){
return
function
(
type
){
return
name
===
type
?
2
*
padding
:
-
1
}},
formatInt
=
function
(
value
){
return
value
.
length
<=
8
?
+
parseInt
(
value
,
16
):
hexToDec
(
value
)},
formatHash
=
function
(
value
){
return
"0x"
+
value
},
formatBool
=
function
(
value
){
return
"1"
===
value
?
!
0
:
!
1
},
formatString
=
function
(
value
){
return
web3
.
toAscii
(
value
)};
return
[{
padding
:
prefixedType
(
"uint"
,
1
),
format
:
formatInt
},{
padding
:
prefixedType
(
"int"
,
1
),
format
:
formatInt
},{
padding
:
prefixedType
(
"hash"
,
1
),
format
:
formatHash
},{
padding
:
prefixedType
(
"string"
,
8
),
format
:
formatString
},{
padding
:
namedType
(
"address"
,
20
)},{
padding
:
namedType
(
"bool"
,
1
),
format
:
formatBool
}]},
outputTypes
=
setupOutputTypes
(),
fromAbiOutput
=
function
(
json
,
methodName
,
output
){
var
result
,
method
,
i
,
padding
,
j
,
res
,
formatter
,
index
=
findMethodIndex
(
json
,
methodName
);
if
(
-
1
!==
index
){
for
(
output
=
output
.
slice
(
2
),
result
=
[],
method
=
json
[
index
],
i
=
0
;
i
<
method
.
outputs
.
length
;
i
++
){
for
(
padding
=-
1
,
j
=
0
;
j
<
outputTypes
.
length
&&-
1
===
padding
;
j
++
)
padding
=
outputTypes
[
j
].
padding
(
method
.
outputs
[
i
].
type
);
-
1
!==
padding
&&
(
res
=
output
.
slice
(
0
,
padding
),
formatter
=
outputTypes
[
j
-
1
].
format
,
result
.
push
(
formatter
?
formatter
(
res
):
"0x"
+
res
),
output
=
output
.
slice
(
padding
))}
return
result
}},
inputParser
=
function
(
json
){
var
parser
=
{};
return
json
.
forEach
(
function
(
method
){
parser
[
method
.
name
]
=
function
(){
var
params
=
Array
.
prototype
.
slice
.
call
(
arguments
);
return
toAbiInput
(
json
,
method
.
name
,
params
)}}),
parser
},
outputParser
=
function
(
json
){
var
parser
=
{};
return
json
.
forEach
(
function
(
method
){
parser
[
method
.
name
]
=
function
(
output
){
return
fromAbiOutput
(
json
,
method
.
name
,
output
)}}),
parser
},
module
.
exports
=
{
inputParser
:
inputParser
,
outputParser
:
outputParser
};
},{}],
2
:[
function
(
require
,
module
,
exports
){
var
AutoProvider
=
function
(
userOptions
){
var
options
,
self
,
closeWithSuccess
,
ws
;
if
(
!
web3
.
haveProvider
()){
if
(
this
.
sendQueue
=
[],
this
.
onmessageQueue
=
[],
navigator
.
qt
)
return
void
(
this
.
provider
=
new
web3
.
providers
.
QtProvider
);
userOptions
=
userOptions
||
{},
options
=
{
httprpc
:
userOptions
.
httprpc
||
"http://localhost:8080"
,
websockets
:
userOptions
.
websockets
||
"ws://localhost:40404/eth"
},
self
=
this
,
closeWithSuccess
=
function
(
success
){
ws
.
close
(),
success
?
self
.
provider
=
new
web3
.
providers
.
WebSocketProvider
(
options
.
websockets
):(
self
.
provider
=
new
web3
.
providers
.
HttpRpcProvider
(
options
.
httprpc
),
self
.
poll
=
self
.
provider
.
poll
.
bind
(
self
.
provider
)),
self
.
sendQueue
.
forEach
(
function
(
payload
){
self
.
provider
(
payload
)}),
self
.
onmessageQueue
.
forEach
(
function
(
handler
){
self
.
provider
.
onmessage
=
handler
})},
ws
=
new
WebSocket
(
options
.
websockets
),
ws
.
onopen
=
function
(){
closeWithSuccess
(
!
0
)},
ws
.
onerror
=
function
(){
closeWithSuccess
(
!
1
)}}};
AutoProvider
.
prototype
.
send
=
function
(
payload
){
return
this
.
provider
?
void
this
.
provider
.
send
(
payload
):
void
this
.
sendQueue
.
push
(
payload
)},
Object
.
defineProperty
(
AutoProvider
.
prototype
,
"onmessage"
,{
set
:
function
(
handler
){
return
this
.
provider
?
void
(
this
.
provider
.
onmessage
=
handler
):
void
this
.
onmessageQueue
.
push
(
handler
)}}),
module
.
exports
=
AutoProvider
;
},{}],
3
:[
function
(
require
,
module
,
exports
){
...
...
dist/ethereum.js.map
View file @
1d139f7a
This diff is collapsed.
Click to expand it.
dist/ethereum.min.js
View file @
1d139f7a
This diff is collapsed.
Click to expand it.
lib/abi.js
View file @
1d139f7a
...
...
@@ -21,6 +21,11 @@
* @date 2014
*/
// TODO: is these line is supposed to be here?
if
(
process
.
env
.
NODE_ENV
!==
'build'
)
{
var
web3
=
require
(
'./web3'
);
// jshint ignore:line
}
// TODO: make these be actually accurate instead of falling back onto JS's doubles.
var
hexToDec
=
function
(
hex
)
{
return
parseInt
(
hex
,
16
).
toString
();
...
...
@@ -50,16 +55,20 @@ var padLeft = function (string, chars) {
};
var
setupInputTypes
=
function
()
{
var
prefixedType
=
function
(
prefix
)
{
// @param prefix is the string prefix of the type
// @param bitsInNumber is number of bits per number in type
var
prefixedType
=
function
(
prefix
,
bitsInNumber
)
{
return
function
(
type
,
value
)
{
var
expected
=
prefix
;
if
(
type
.
indexOf
(
expected
)
!==
0
)
{
return
false
;
}
var
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
;
var
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
*
bitsInNumber
;
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
...
...
@@ -83,9 +92,10 @@ var setupInputTypes = function () {
};
return
[
prefixedType
(
'uint'
),
prefixedType
(
'int'
),
prefixedType
(
'hash'
),
prefixedType
(
'uint'
,
1
),
prefixedType
(
'int'
,
1
),
prefixedType
(
'hash'
,
1
),
prefixedType
(
'string'
,
8
),
namedType
(
'address'
,
20
),
namedType
(
'bool'
,
1
,
formatBool
),
];
...
...
@@ -118,14 +128,17 @@ var toAbiInput = function (json, methodName, params) {
};
var
setupOutputTypes
=
function
()
{
var
prefixedType
=
function
(
prefix
)
{
// @param prefix is the string prefix of the type
// @param bitsInNumber is number of bits per number in type
var
prefixedType
=
function
(
prefix
,
bitsInNumber
)
{
return
function
(
type
)
{
var
expected
=
prefix
;
if
(
type
.
indexOf
(
expected
)
!==
0
)
{
return
-
1
;
}
var
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
;
var
padding
=
parseInt
(
type
.
slice
(
expected
.
length
))
/
8
*
bitsInNumber
;
return
padding
*
2
;
};
};
...
...
@@ -148,10 +161,15 @@ var setupOutputTypes = function () {
return
value
===
'1'
?
true
:
false
;
};
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
(
'uint'
,
1
),
format
:
formatInt
},
{
padding
:
prefixedType
(
'int'
,
1
),
format
:
formatInt
},
{
padding
:
prefixedType
(
'hash'
,
1
),
format
:
formatHash
},
{
padding
:
prefixedType
(
'string'
,
8
),
format
:
formatString
},
{
padding
:
namedType
(
'address'
,
20
)
},
{
padding
:
namedType
(
'bool'
,
1
),
format
:
formatBool
}
];
...
...
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