Example #1
0
 def test_adding_messages_links_them_correctly(self):
     msg1 = Message("first")
     msg2 = Message("second")
     block = Block()
     block.add_message(msg1)
     block.add_message(msg2)
     self.assertEqual(msg2.prev_hash, msg1.hash)
Example #2
0
 def get_blocks(self, *args):
     L = []
     for arg in args:
         b = Block()
         b.add_message(Message(arg))
         L.append(b)
     for i, block in enumerate(L):
         block.link(L[i-1]) if i > 0 else None
         block.seal()
     return L
Example #3
0
from blockchain import Message, Block, Blockchain
import pickle

B1 = Block()
B1.add_message(Message("This is the 1st message"))
B1.add_message(Message("2nd message", "Alice", "Bob"))
B1.add_message(Message("3rd message", "Bob", "Alice"))
B1.seal()

B2 = Block()
B2.add_message(Message("4th message"))
B2.add_message(Message("5th message", "Eve", "Steve"))
B2.seal()

B3 = Block()
B3.add_message(Message("6th message"))
B3.add_message(Message("7th message", "Me", "Everyone"))
B3.seal()

chain = Blockchain()
chain.add_block(B1)
chain.add_block(B2)
chain.add_block(B3)

print("Validating blockchain...")
chain.validate()

print("Serializing...")
pickle.dump(chain, open('chain.p', 'wb'))

print("Deserializing and validating...")
Example #4
0
from blockchain import Message, Block, Blockchain
import pickle

B1 = Block()
B1.add_message(Message("This is the first message"))
B1.add_message(Message("Second message", "Alice", "Bob"))
B1.add_message(Message("Third message", "Bob", "Alice"))
B1.seal()

B2 = Block()
B2.add_message(Message("Fourth message"))
B2.add_message(Message("Fifth message", "Eve", "Steve"))
B2.seal()

B3 = Block()
B3.add_message(Message("Sixth message"))
B3.add_message(
    Message("Seventh Son of a Seventh Son is Iron Maiden's best album", "Me",
            "Everyone"))
B3.seal()

B4 = Block()
B4.add_message(Message("Eighth message", "Bob", "Charlie"))
B4.add_message(Message("Ninth message", "Charlie", "Daniels"))
B4.add_message(Message("Tenth message", "Charlie", "Brown"))

chain = Blockchain()
chain.add_block(B1)
chain.add_block(B2)
chain.add_block(B3)
chain.add_block(B4)
Example #5
0
class Boid(Physics_object):
    def __init__(self, game, position):
        super().__init__(game, position)
        self.image = pg.Surface((20, 20))
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()

        self.speed = randint(2, 3)
        self.max_force = 0.3
        self.friction = 0.75
        self.target = vec(0, 0)
        self.extent = vec(0, 0)
        self.theta = 0
        self.id = random.random()
        self.b = Block()
        msg = str(self.id)
        self.b.add_message(Message(msg))

        chain.add_block(self.b)
        print(self.id)

    def update(self):
        # seek a target
        self.acc += self.wander()

        # flocking behavior (see youtube video for explanation)
        alignment = self.alignment()
        separation = self.separation()
        cohesion = self.cohesion()
        # adjust the vectors according to the chosen slider values
        alignment *= self.game.slider1.get_val()
        separation *= self.game.slider2.get_val()
        cohesion *= self.game.slider3.get_val()
        # add flocking to the acceleration vector
        self.acc += alignment
        self.acc += separation
        self.acc += cohesion
        super().update()

    def alignment(self):
        perception_radius = 40
        steering = vec(0, 0)
        total = 0
        for other in self.game.all_sprites:
            if other != self:
                dist = other.pos.distance_to(self.pos)
                if dist < perception_radius:
                    steering += other.vel
                    total += 1
        if total > 0:
            steering *= 1 / total
            steering -= self.vel
            limit(steering, self.max_force)

        return steering

    def separation(self):
        perception_radius = 40
        steering = vec(0, 0)
        total = 0
        for other in self.game.all_sprites:
            if other != self:
                d = self.pos - other.pos
                dist = d.length()
                if dist < perception_radius:
                    d /= (dist * dist)
                    steering += d
                    total += 1
        if total > 0:
            steering /= total
            steering.scale_to_length(self.speed)
            steering -= self.vel
            limit(steering, self.max_force)

        return steering

    def cohesion(self):
        perception_radius = 80
        steering = vec(0, 0)
        total = 0
        for other in self.game.all_sprites:
            if other != self:
                dist = other.pos.distance_to(self.pos)
                if dist < perception_radius:
                    steering += other.pos
                    total += 1
        if total > 0:
            steering *= 1 / total
            steering -= self.pos
            steering.scale_to_length(self.speed)
            steering -= self.vel
            limit(steering, self.max_force)

        return steering

    def arrive(self, target):
        # make the boid move to a target position
        desired = target - self.pos
        d = desired.length()
        desired = desired.normalize()
        radius = 100

        if d < radius:
            m = remap(d, 0, radius, 0, self.speed)
            desired *= m

        else:
            desired *= self.speed

        # calculate steering force
        steering = desired - self.vel
        limit(steering, self.max_force)

        return steering

    def wander(self):
        # calculate a target that changes slightly each frame by a random angle
        if self.vel.length_squared() != 0:
            # extent vector as a multiple of the velocity
            self.extent = self.vel.normalize() * 80
            # radius
            r = 30
            # change the angle by a small random amount each frame
            self.theta += uniform(-1, 1) / 16
            self.target = self.pos + self.extent + vec(r * cos(self.theta),
                                                       r * sin(self.theta))

        return self.arrive(self.target)
Example #6
0
from blockchain import Message, Block, Blockchain
import pickle

B1 = Block()
B1.add_message(Message("This is the first message"))
B1.add_message(Message("Second message", "Alice", "Bob"))
B1.add_message(Message("Third message", "Bob", "Alice"))
B1.seal()

B2 = Block()
B2.add_message(Message("Fourth message"))
B2.add_message(Message("Fifth message", "Eve", "Steve"))
B2.seal()

B3 = Block()
B3.add_message(Message("Sixth message"))
B3.add_message(Message("Seventh Son of a Seventh Son is Iron Maiden's best album", "Me", "Everyone"))
B3.seal()

B4 = Block()
B4.add_message(Message("Eighth message", "Bob", "Charlie"))
B4.add_message(Message("Ninth message", "Charlie", "Daniels"))
B4.add_message(Message("Tenth message", "Charlie", "Brown"))

chain = Blockchain()
chain.add_block(B1)
chain.add_block(B2)
chain.add_block(B3)
chain.add_block(B4)

print("Validating blockchain...")
Example #7
0
 def test_add_message_appends_and_links_message(self):
     msg = Message("test")
     block = Block()
     block.add_message(msg)
     self.assertEqual(1, len(block.messages))
     self.assertEqual(msg, block.messages[0])
Example #8
0
 def get_block(self, msg):
     B = Block()
     B.add_message(Message(msg))
     return B