func (self *JSPipe) FromNumber(str string) string { if ethutil.IsHex(str) { str = str[2:] } return ethutil.BigD(ethutil.Hex2Bytes(str)).String() }
func (self *JSPipe) FromAscii(str string) string { if ethutil.IsHex(str) { str = str[2:] } return string(bytes.Trim(ethutil.Hex2Bytes(str), "\x00")) }
func (self *Object) StorageString(str string) *ethutil.Value { if ethutil.IsHex(str) { return self.Storage(ethutil.Hex2Bytes(str[2:])) } else { return self.Storage(ethutil.RightPadBytes([]byte(str), 32)) } }
func (self *Pipe) TransactString(key *ethcrypto.KeyPair, rec string, value, gas, price *ethutil.Value, data []byte) ([]byte, error) { // Check if an address is stored by this address var hash []byte addr := self.World().Config().Get("NameReg").StorageString(rec).Bytes() if len(addr) > 0 { hash = addr } else if ethutil.IsHex(rec) { hash = ethutil.Hex2Bytes(rec[2:]) } else { hash = ethutil.Hex2Bytes(rec) } return self.Transact(key, hash, value, gas, price, data) }
func (self *UiLib) Transact(object map[string]interface{}) (*ethpipe.JSReceipt, error) { // Default values if object["from"] == nil { object["from"] = "" } if object["to"] == nil { object["to"] = "" } if object["value"] == nil { object["value"] = "" } if object["gas"] == nil { object["gas"] = "" } if object["gasPrice"] == nil { object["gasPrice"] = "" } var dataStr string var data []string if list, ok := object["data"].(*qml.List); ok { list.Convert(&data) } for _, str := range data { if ethutil.IsHex(str) { str = str[2:] if len(str) != 64 { str = ethutil.LeftPadString(str, 64) } } else { str = ethutil.Bytes2Hex(ethutil.LeftPadBytes(ethutil.Big(str).Bytes(), 32)) } dataStr += str } return self.JSPipe.Transact( object["from"].(string), object["to"].(string), object["value"].(string), object["gas"].(string), object["gasPrice"].(string), dataStr, ) }
func (self *JSPipe) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (*JSReceipt, error) { var hash []byte var contractCreation bool if len(toStr) == 0 { contractCreation = true } else { // Check if an address is stored by this address addr := self.World().Config().Get("NameReg").StorageString(toStr).Bytes() if len(addr) > 0 { hash = addr } else { hash = ethutil.Hex2Bytes(toStr) } } var keyPair *ethcrypto.KeyPair var err error if ethutil.IsHex(key) { keyPair, err = ethcrypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key[2:]))) } else { keyPair, err = ethcrypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key))) } if err != nil { return nil, err } var ( value = ethutil.Big(valueStr) gas = ethutil.Big(gasStr) gasPrice = ethutil.Big(gasPriceStr) data []byte tx *ethchain.Transaction ) if ethutil.IsHex(codeStr) { data = ethutil.Hex2Bytes(codeStr[2:]) } else { data = ethutil.Hex2Bytes(codeStr) } if contractCreation { tx = ethchain.NewContractCreationTx(value, gas, gasPrice, data) } else { tx = ethchain.NewTransactionMessage(hash, value, gas, gasPrice, data) } acc := self.obj.StateManager().TransState().GetOrNewStateObject(keyPair.Address()) tx.Nonce = acc.Nonce acc.Nonce += 1 self.obj.StateManager().TransState().UpdateStateObject(acc) tx.Sign(keyPair.PrivateKey) self.obj.TxPool().QueueTransaction(tx) if contractCreation { logger.Infof("Contract addr %x", tx.CreationAddress()) } return NewJSReciept(contractCreation, tx.CreationAddress(), tx.Hash(), keyPair.Address()), nil }