Skip to content

Commit

Permalink
Merge pull request #4 from trinity-project/dev
Browse files Browse the repository at this point in the history
fix issue
  • Loading branch information
pigxo authored Jan 22, 2018
2 parents 098306a + e9d44ae commit 6a44aec
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 60 deletions.
7 changes: 3 additions & 4 deletions src/channel_manager/channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def __init__(self, sender, receiver):
@property
def channel_name(self):
channel_name = "".join(map(lambda x, y: x+y, self.sender, self.receiver))
peer_channel_name= "".join(map(lambda x, y: x+y, self.receiver, self.sender))
peer_channel_name= "".join(map(lambda x, y: x+y, self.receiver, self.sender))
if ChannelState(peer_channel_name).find_channel():
return peer_channel_name
else:
Expand Down Expand Up @@ -139,7 +139,7 @@ def get_address_balance(self, address, channels = None):
if not channels:
channels = self.read_channel()
trans_detail = channels[-1]["tx_detail"]
trans = filter(lambda x:x["address"] == address, trans_detail)
trans = [i for i in trans_detail if i["address"]==address]
if trans:
return int(trans[0]["balance"])
else:
Expand Down Expand Up @@ -235,8 +235,7 @@ def has_channel(self):


def get_channelnames_via_address(address):
channel_names = query_channel_from_address(address)
return [i.channel_name for i in channel_names]
return query_channel_from_address(address)



Expand Down
68 changes: 16 additions & 52 deletions src/channel_manager/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

from channel_manager.channel import Channel, State, get_channelnames_via_address
from channel_manager import blockchain
from channel_manager.state import ChannelDatabase, ChannelFile, ChannelState, ChannelAddress, OpenDataBase, DBSession
from utils.channel import split_channel_name
from channel_manager.state import ChannelDatabase, ChannelFile, ChannelState, ChannelAddress
from exception import UnKnownType, NoChannelFound, ChannelNotInOpenState,ChannelFileNoExist,ChannelExistInDb
from utils.common import CommonItem
from configure import Configure
Expand All @@ -12,45 +13,6 @@

log = logging.getLogger(__name__)


class ChannelManagent(Channel):
"""
"""

def __init__(self, sender, receiver, deposit, open_block_number):
super(ChannelManagent, self).__init__(sender, receiver)
self.channel_item = CommonItem.from_dict(self.to_dict)

def registe_channel(self):
try:
channel_name = self.create()
return channel_name
except (ChannelFileNoExist,ChannelExistInDb) as e:
return str(e)

def add_to_channel(self, address, type, channel_name, signature, public_key):
if type not in ["sender", "receiver"]:
raise UnKnownType("%s not sender or receiver" %type)
else:
if type == "sender":
result = blockchain.add_to_channel(address=address, type=type, channel_name = channel_name, deposit=self.channel_item.deposit,
open_block_number=self.channel_item.open_bolck_number)
if result:
return self.channel_name
else:
return None

def close_channel(self):
self.update_channel_to_database(state=State.SETTLING.value)
result = blockchain.setting_transection(self.sender, self.receiver, self.channel_name)
if result:
self.update_channel_to_database(state=State.CLOSED.value)
self.close()
return True
else:
return False

def regist_channel(sender_addr, receiver_addr, asset_type,deposit, open_blockchain):
"""
Expand Down Expand Up @@ -79,6 +41,12 @@ def regist_channel(sender_addr, receiver_addr, asset_type,deposit, open_blockcha
channel.update_channel_state(state=State.OPENING)
return {"channel_name": channel.channel_name,
"trad_info": raw_tans}
else:
channel_name = channel.create(sender_deposit=int(deposit),reciever_deposit=0,open_block_number=open_blockchain,settle_timeout=10)
raw_tans = blockchain.NewTransection(asset_type, sender_addr, Contract_addr, int(deposit))
return {"channel_name":channel_name,
"trad_info":raw_tans}


def send_raw_transaction(sender_address, channel_name, hex):
"""
Expand All @@ -93,10 +61,6 @@ def send_raw_transaction(sender_address, channel_name, hex):
return None






def get_channel_state(address):
"""
Expand All @@ -107,7 +71,7 @@ def get_channel_state(address):
channel_infos =[]
channels = get_channelnames_via_address(address)
for channel in channels:
ch = Channel(channel)
ch = Channel(channel.sender, channel.receiver)
channel_detail = [{"address": ch.sender,
"deposit": ch.sender_deposit,
"balance": ch.get_address_balance(ch.sender)},
Expand Down Expand Up @@ -135,15 +99,16 @@ def sender_to_receiver(sender_addr, receiver_addr, channel_name, asset_type, cou
:param count:
:return:
"""

ch = Channel(channel_name)
sender,receiver = split_channel_name(channel_name)
ch = Channel(sender,receiver)
if sender_addr == ch.sender and receiver_addr == ch.receiver:
return ch.sender_to_receiver(count)
elif receiver_addr == ch.sender and sender_addr == ch.receiver:
return ch.receiver_to_sender(count)
else:
return "Error:Address and Channelname not match"


def close_channel(sender_addr, receiver_addr,channel_name):
"""
Expand All @@ -152,17 +117,16 @@ def close_channel(sender_addr, receiver_addr,channel_name):
:param channel_name:
:return:
"""
channel = Channel(channel_name)
return channel.close()
sender, receiver = split_channel_name(channel_name)
ch = Channel(sender, receiver)
return ch.close()





if __name__ == "__main__":
result = ChannelManagent(sender="AY8r7uG6rH7MRLhABALZvf8jM4bCSfn3YJ",
receiver="AUvupHdCKhaSsfPpzo6f4He4c9wFwhkLmZ", deposit=10,
open_block_number=10).registe_channel()
result = get_channel_state("AY8r7uG6rH7MRLhABALZvf8jM4bCSfn3YJ")
print(result)


2 changes: 2 additions & 0 deletions src/channel_manager/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,10 @@ def query_channel_from_address(address, role="both"):
else:
result = Session.query(ChannelDatabase).filter(ChannelDatabase.sender == address).all()
result.extend(Session.query(ChannelDatabase).filter(ChannelDatabase.receiver == address).all())
print(result[0].sender)
return result


if __name__ == "__main__":
from channel_manager.channel import State
channel = ChannelState("testchannlename")
Expand Down
3 changes: 2 additions & 1 deletion src/configure.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json
Configure_file ="configure.json"
import os
Configure_file = os.path.join(os.path.dirname(__file__),"configure.json")

with open(Configure_file,'r') as f:
Configure = json.load(f)
2 changes: 1 addition & 1 deletion src/proxy/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def regist_channle(sender_addr, receiver_addr, asset_type,deposit, open_blockcha


@jsonrpc.method("getchannelstate")
def get_channel_state(self, local_address):
def get_channel_state(local_address):
return manager.get_channel_state(local_address)


Expand Down
6 changes: 4 additions & 2 deletions src/utils/channel.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
def split_bind_channel_name(bind_channel_name):
return bind_channel_name[::2], bind_channel_name[1::2]
def split_channel_name(channel_name):
sender_addr = channel_name[::2]
receiver_addr = channel_name[1::2]
return sender_addr, receiver_addr

0 comments on commit 6a44aec

Please sign in to comment.